digitalmars.D.learn - Object.factory create instance failed?
- Sam Hu (44/44) Jun 25 2009 The Dmd2.030 spec. said:
- Sam Hu (3/63) Jun 25 2009 BTW,why __traits has no isStaticFunction?
- John C (2/23) Jun 25 2009 Object.factory requires a fully qualified class name, so if class Dog re...
- Sam Hu (3/4) Jun 25 2009 It works now.Great!Thanks so much!
- Ary Borenszweig (2/9) Jun 25 2009 There: http://d.puremagic.com/issues/show_bug.cgi?id=3093
- Sam Hu (3/13) Jun 25 2009 Thanks a lot.
- John C (2/10) Jun 26 2009 Common sense, to be honest.
The Dmd2.030 spec. said: static Object factory(string classname); Create instance of class specified by classname. The class must either have no constructors or have a default constructor. and said also: class ClassInfo static ClassInfo find(in char[] classname); Search all modules for ClassInfo corresponding to classname. Returns: null if not found Object create(); Create instance of Object represented by 'this'. In below code snippet: class Dog { public void bark(){} } int main(string[] args) { auto obj=Object.factory("Dog"); Dog doggie=cast(Dog)obj; doggie.bark; return 0; } Compiled successfully but failed when run: Object.Error:Access Violation. I also tried ClassInfo.find(string classname),ClassInfo.create() but caused the same error. In the above code snippet,if I wrote as below: class Dog{...} int main(string[] args) { Object obj=Object.factory("Dog"); obj=new Dog; //1 Dog doggie=cast(Dog)obj;//2 doggie.bark; return 0; } Everything works fine.But it seems that this does not make sense to dynamic create class instance.It is just the same as below: Object obj; obj=new Dog; (cast(Dog)obj).bark; So is there any other options can I reach the goal,i.e.,dynamically create an class instance and invoke its method? Thanks in advance. Regards, Sam
Jun 25 2009
Sam Hu Wrote:The Dmd2.030 spec. said: static Object factory(string classname); Create instance of class specified by classname. The class must either have no constructors or have a default constructor. and said also: class ClassInfo static ClassInfo find(in char[] classname); Search all modules for ClassInfo corresponding to classname. Returns: null if not found Object create(); Create instance of Object represented by 'this'. In below code snippet: class Dog { public void bark(){} } int main(string[] args) { auto obj=Object.factory("Dog"); Dog doggie=cast(Dog)obj; doggie.bark; return 0; } Compiled successfully but failed when run: Object.Error:Access Violation. I also tried ClassInfo.find(string classname),ClassInfo.create() but caused the same error. In the above code snippet,if I wrote as below: class Dog{...} int main(string[] args) { Object obj=Object.factory("Dog"); obj=new Dog; //1 Dog doggie=cast(Dog)obj;//2 doggie.bark; return 0; } Everything works fine.But it seems that this does not make sense to dynamic create class instance.It is just the same as below: Object obj; obj=new Dog; (cast(Dog)obj).bark; So is there any other options can I reach the goal,i.e.,dynamically create an class instance and invoke its method? Thanks in advance. Regards, SamBTW,why __traits has no isStaticFunction? Thanks in advance.
Jun 25 2009
Sam Hu Wrote:In below code snippet: class Dog { public void bark(){} } int main(string[] args) { auto obj=Object.factory("Dog"); Dog doggie=cast(Dog)obj; doggie.bark; return 0; } Compiled successfully but failed when run: Object.Error:Access Violation. I also tried ClassInfo.find(string classname),ClassInfo.create() but caused the same error.Object.factory requires a fully qualified class name, so if class Dog resides in module animals, call Object.factory("animals.Dog").
Jun 25 2009
John C Wrote:Object.factory requires a fully qualified class name, so if class Dog resides in module animals, call Object.factory("animals.Dog").It works now.Great!Thanks so much! But...may I ask how do you know that?(requires full name).I went through the object.di but nothing relative found.
Jun 25 2009
Sam Hu escribió:John C Wrote:There: http://d.puremagic.com/issues/show_bug.cgi?id=3093Object.factory requires a fully qualified class name, so if class Dog resides in module animals, call Object.factory("animals.Dog").It works now.Great!Thanks so much! But...may I ask how do you know that?(requires full name).I went through the object.di but nothing relative found.
Jun 25 2009
Ary Borenszweig Wrote:Sam Hu escribi?Thanks a lot. I found the reflection(object module + __traits) of the current version of D2 is very powerful already .Wondering how come some ppl here felt that D is still lack of reflection?John C Wrote:There: http://d.puremagic.com/issues/show_bug.cgi?id=3093Object.factory requires a fully qualified class name, so if class Dog resides in module animals, call Object.factory("animals.Dog").It works now.Great!Thanks so much! But...may I ask how do you know that?(requires full name).I went through the object.di but nothing relative found.
Jun 25 2009
Sam Hu Wrote:John C Wrote:Common sense, to be honest.Object.factory requires a fully qualified class name, so if class Dog resides in module animals, call Object.factory("animals.Dog").It works now.Great!Thanks so much! But...may I ask how do you know that?(requires full name).I went through the object.di but nothing relative found.
Jun 26 2009