C'tors from templates
Robert Clipsham
robert at octarineparrot.com
Sat Oct 31 13:16:29 PDT 2009
dsimcha wrote:
> == Quote from Robert Clipsham (robert at octarineparrot.com)'s article
>> dsimcha wrote:
>>> Is there a way to run a class's c'tor on a block of memory from a template
>>> function? For example:
>>>
>>> C newClass(C, CtorArgs...)(CtorArgs args) {
>>> // Allocate, initialize.
>>> // Want to call the c'tor that takes type CtorArgs.
>>> }
>> ----
>> C newClass(C, CtorArgs...)(CtorArgs args) {
>> return new C(args);
>> }
>> class Foo{ this(int a, string b) { /* do something */ } }
>> auto foo = newClass!(Foo)(1, "bar");
>> ----
>> That seems to work here... or are you meaning you already have a block
>> of memory allocated and want to turn it into an instance of the class?
>> In which case something like:
>> ----
>> C newClass(C, CtorArgs...)(CtorArgs args) {
>> void* mem;
>> // Allocate/initialize etc, store in inst of type C
>> // Stolen/adapted from Object.d:
>> if( inst.classinfo.flags & 8 && inst.classinfo.defaultConstructor )
>> {
>> C delegate(CtorArgs) ctor;
>> ctor.ptr = cast(void*)inst;
>> ctor.funcptr = cast(C function(CtorArgs))
>> inst.classinfo.defaultConstructor;
>> return ctor(args);
>> }
>> return null;
>> }
>> ----
>> Should work (untested).
>
> I meant the latter, but not just for the default constructor, for any constructor.
I'm not sure that it's possible to access ctors other than the default
one, I can't seem to find any mention of them in the abi or object.d,
you might have better luck if you search yourself though, I only had a
quick skim. If not it might be worth a feature request?
More information about the Digitalmars-d
mailing list