On Tuesday, 8 August 2017 at 21:04:23 UTC, Jacob Carlborg wrote:
On 2017-08-08 20:51, Johan Engelen wrote:
Hi all,
   Currently, it is not possible to call the C++ function "void
foo(Klass&)" when Klass is an extern(C++) _class_ on the D side. You have to declare Klass as a D _struct_, otherwise there is no way to get the correct mangling. When Klass has virtual functions, you're hosed.

For more context (involving "const"), see:
https://forum.dlang.org/post/tvohflgtaxlynpzed...@forum.dlang.org

Is this problem on anybody's radar?
What are the ideas to resolve this issue, or are we content never to
solve it?

One way to do it, that might be a bit confusing, is to force the declaration of the function to explicitly specify a pointer or a reference. Currently it looks like it's an implicit pointer.

extern (C++) class Klass {}
void foo(Klass*); // ok
void foo(ref Klass); // ok
void foo(Klass); // error

Of course, there's always pragma(mangle) as well.

sorry for hijacking the thread but i have a similar question:

i was wondering if i could write a wrapper for a C++11 library called cpr. in one of its header files (https://github.com/whoshuu/cpr/blob/master/include/cpr/auth.h#L13) it has a generic constructor that initializes its member fields. i had no idea as to how to do it. then i came up with the following line:

    extern (C++, cpr) {
        this(UT, PT)(ref UT username, ref PT password) { ... }
    }

when i compiled it with the .a lib given, it worked. do you guys think i did it right? the &

my second question is: i have no idea what's going on in this file: https://github.com/whoshuu/cpr/blob/master/include/cpr/body.h i'd appreciate some pointers.


Reply via email to