
CustomizeObject()
*****************


FUNKTION
========

   string CustomizeObject();


DEFINIERT IN
============

   /std/virtual/v_compiler.c


ARGUMENTE
=========

   keine


RUeCKGABEWERT
=============

   Den Objektnamen, den das zuletzt erzeugte Objekt (welches gerade die
   Funktion aufruft) spaeter vom Driver bekommen wird.


BESCHREIBUNG
============

   Diese Funktion ist aus dem Grunde da, da zum Zeitpunkt des Clonens des
   VC-Objektes (P_STD_OBJECT) dieses Objekt ja noch nicht weiss Wer
   oder Was es spaeter mal sein wird.
   Deshalb kann dieses VC-Objekt im create() (und nur da!) die Funktion
   CustomizeObject() in dem virtual_compiler aufrufen, welches das Objekt
   geclont hat und bekommt von diesem den Objektnamen zureck, welches es
   spaeter mal bekommen wird.
   Da das VC-Objekt vom VC geclont wurde, ist previous_object() im create()
   des VC-Objektes der VC, in dem man CustomizeObject() ruft.


BEMERKUNGEN
===========

   Das CustomizeObject() im Standard-VC gibt nur den zukuenftigen Objektnamen
   zurueck und macht sonst nix.


BEISPIELE
=========

   create() eines VC-Objektes:



   protected void create() {
     ...



     // wer bin ich denn eigentlich?
     string myname = previous_object()->CustomizeObject();
     switch(myname) {
       // Kram konfigurier, ja nach myname...
     }



     ...
   }


SIEHE AUCH
==========

   virtual_compiler
   CustomizeObject(), Validate(), NoParaObjects(),
   P_COMPILER_PATH, P_PARA
   /std/virtual/v_compiler.c

21.10.2007, Zesstra
