October 19, 2004 classinfo issue | ||||
---|---|---|---|---|
| ||||
The documentation for stack allocation of classes has the line Foo f = new(std.c.stdlib.alloca(Foo.classinfo.init.length)) Foo; which works fine. The problem is when I try to Foo.classinfo in another class. For example class clsB { new(uint sz, void* p){ return p; } int x,y; } struct StorageFor(T:Object) { ubyte[T.classinfo.init.length] data; } class clsA { StorageFor!(clsB) storageForB; clsB b; this() { b = new(&storageForB) clsB; } } int main() { clsA a = new clsA; return 0; } it errors during the "semantic" phase that clsB doesn't has a property 'classinfo' (even if I remove the template). My guess is that the classinfo's are valid only during a later semantic phase. It would be nice to be able to use classinfo's for placing storage in other classes as well as on the stack. -Ben |
October 19, 2004 Re: classinfo issue | ||||
---|---|---|---|---|
| ||||
Posted in reply to Ben Hinkle | On Tue, 19 Oct 2004 12:10:49 -0400, Ben Hinkle <bhinkle@mathworks.com> wrote: > class clsB { > new(uint sz, void* p){ return p; } > int x,y; > } > struct StorageFor(T:Object) { > ubyte[T.classinfo.init.length] data; > } > class clsA { > StorageFor!(clsB) storageForB; > clsB b; > this() { > b = new(&storageForB) clsB; > } > } > int main() { > clsA a = new clsA; > return 0; > } Cool idea. (cast(TypeInfoClass)typeid(T)).info.init.length works, but it's not a constant. |
Copyright © 1999-2021 by the D Language Foundation