Boost logo

Boost :

From: Roland Schwarz (roland.schwarz_at_[hidden])
Date: 2004-12-06 02:41:40

Jeff Garland wrote:

>I'm interested in seeing something like this in boost...
>Question -- will this compile in your implementation?
> square* ps4 = dynamic_new<square>("square", 10.0);
>as well as:
> shape* ps4 = dynamic_new<shape>("square", 10.0);
Well this depends on which types you have registered.

     square* ps4 = dynamic_new<square>("square", 10.0);

you are assuming a different base class than shape, and to this
end you also would need to "declare"

But I admit since I only posted a small example to find out
the level of interest I did not put much effort to explain
my rationale and the possible range of usages.

It goes something along this:
To call a function of an object you need its interface.
I use an (not necessarily) abstract base class to describe
it. I use the covariant return types feature of C++ to
return pointers to derived classes from a creator function.

So the pattern of usage is:

baseclass* p = dynamic_new<baseclass>("derivedclass");

if the dynamic new cannot perform the requested operation at runtime it
return a 0 - pointer instead. If succesfull p points to the derived class.
To make it the exakt derived class, you need to cast it of course.

derivedclass* p = (derivedclass*)dynamic_new<baseclass>("derivedclass");

But this of course is not of much use, since it is easier then to call

derivedclass* p = new derivedclass;

since you already know everything that is needed to create the object.


Boost list run by bdawes at, gregod at, cpdaniel at, john at