Define "createXXX" functions for the constructors of class XXX

tcak via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Sat Jan 23 12:27:54 PST 2016


On Saturday, 23 January 2016 at 19:42:29 UTC, Johan Engelen wrote:
> Hi all,
>   While trying to interface C++ and D, I have to new a few D 
> objects in C++ code. I am doing this using a D function: "XXX 
> createXXX(...) { return new XXX(...); }".
> I am sure there must be some great way to automatically 
> generate these creator functions, but I don't know how to do it.
>
> In the C++-header I will write manually:
>   XXX* createXXX(int a, int b);
>   XXX* createXXX(bool flag);
>
> In D source:
>   extern (C++) class XXX {
>     this(int a, int b) { /+...+/ }
>     this(bool flag) { /+...+/ }
>   }
>
> // Somehow define these guys automatically, 
> "genCreateCtors!(XXX)" ?
>   XXX createXXX(int a, int b) { return new XXX(a, b); }
>   XXX createXXX(bool flag) { return new XXX(flag); }
>
> Thanks a lot!
>   Johan

Wow! There are lots of XXX there.

Anyway, I did a similar thing to yours for automatic attribute 
definition before. Three things:

1. Template
2. Mixin
3. Compile time function

You define a compile time function which generates a string that 
is valid D code.
You define template that takes some parameters (Your XXX values), 
and calls the function to merge them.
In your class, you use mixin and template to generate the string 
and inject the generated code.

Not that complex once you do it.

Try to understand this code.
http://david.rothlis.net/d/templates/

Its in there.


More information about the Digitalmars-d-learn mailing list