On 5/23/2018 10:48 AM, Manu wrote:
Sadly, neither of these are correct.
The type is a class (has vtable, etc), so it is declared in D as a
class... It is also a class in C++, so it must mangle like a class.
It's also the case that it's passed by pointer, in C++ and in D. It's
a class that definitely behaves like a class.
The trouble is getting the class name into the function signature as
T, where the D compiler really wants to put Class* because that's the
type it sees a D class to be.

One way is to create a wrapper for C in another module:

---- a.d -----
extern (C++) class C { ... }

---- b.d -----

import a;

extern (C++) struct C {
    a.C m;
    alias m this;
}
--------------

This relies on D regarding a.C and b.C as different symbols, even though they mangle the same.

Reply via email to