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.