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