Calling C++ "void foo(Klass&)"

Jacob Carlborg via Digitalmars-d digitalmars-d at puremagic.com
Tue Aug 8 14:04:23 PDT 2017


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/tvohflgtaxlynpzedqky@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.

-- 
/Jacob Carlborg


More information about the Digitalmars-d mailing list