How to pass a class by (const) reference to C++

Jan Jan at Krassnigg.de
Mon Dec 13 21:17:49 UTC 2021


On Monday, 13 December 2021 at 12:16:03 UTC, Ola Fosheim Grøstad 
wrote:
> On Monday, 13 December 2021 at 12:08:30 UTC, evilrat wrote:
>> Yeah but it sucks to have making C++ wrapper just for this. I 
>> think either pragma mangle to hammer it in place or helper 
>> dummy struct with class layout that mimics this shim logic is 
>> a better solution in such cases.
>> Literally anything but building C++ code twice for a project.
>
> Does something like this work?
>
>
> ```
> class _A {}
> struct A {}
>
> extern(C++) void CppFunc(ref const(A) arg);
>
> void func(_A a){
>     CppFunc(*cast(A*)a);
> }
> ```

Unfortunately no. Maybe the cast would even make it work, but I 
can't have "A" and "_A" in D as separate types, because the class 
is supposed to link to C++ functions and thus renaming it from A 
to _A breaks that. On the other hand I can't give the struct 
another name either, because that's how it is linked to in 
"CppFunc".



More information about the Digitalmars-d-learn mailing list