How to pass a class by (const) reference to C++
evilrat
evilrat666 at gmail.com
Mon Dec 13 07:48:34 UTC 2021
On Sunday, 12 December 2021 at 21:24:39 UTC, Jan wrote:
> In D I have an extern(C++) class:
>
> ```cpp
> extern(C++) class A
> {
> ~this();
>
> // other stuff
> }
> ```
>
> An a function that takes A by const reference:
>
> ```cpp
> void CppFunc(const A& arg);
> ```
>
> But how do I bind this in D ?
>
> ```cpp
> extern(C++) void CppFunc(A arg); // tries to pass as 'A*'
> extern(C++) void CppFunc(ref const(A) arg); // tries to pass as
> 'A const * const &'
> ```
>
> I have solved similar problems with other classes by declaring
> them as struct in D, but that only works for classes that have
> no virtual functions. I now have a class where I do need to use
> a class on the D side, and now I have problems passing these
> objects to C++.
You can tell compiler to mangle it as struct/class using
extern(C++, struct).
```d
extern (C++, struct) // will use struct mangling even though it's
a class
class SomeDClass
{
...
}
```
More information about the Digitalmars-d-learn
mailing list