What is the wrong with my C++ interfacing

Arine arine123445128843 at gmail.com
Sun Mar 15 22:25:27 UTC 2020

On Sunday, 15 March 2020 at 21:27:32 UTC, Ferhat Kurtulmuş wrote:
> On Sunday, 15 March 2020 at 21:16:43 UTC, Arine wrote:
>> On Sunday, 15 March 2020 at 20:53:49 UTC, Ferhat Kurtulmuş
>> I wouldn't use a class on the D side, unless your C++ type 
>> uses virtual functions. Classes in D are different from 
>> structs, it is not the same as C++ where they are basically 
>> the same thing.
> I know their differences, classes are reference types and 
> structs are value types in D.

That's not the only difference. It's why your code doesn't work.

> I actually don't need this code. I've already wrapped many c 
> code, but have no so much experience with interfacing C++ code. 
> I am trying to understand capabilities of D in interfacing with 
> C++ and its limits. I would like to know why I can interface a 
> template-free class, but not a class template.

You can, you just aren't representing the C++ code properly in D. 
You don't want class, it means something different in D than in 

This works for me, as it is using struct that corresponds to the 
C++ type. You have to use extern(C++, class), as it is using 
"class" on the C++ side, which produces a different mangling.

extern(C++, cv){
extern(C++, class) struct Size_(_Tp){
     @disable this();
	~this() { }

     final _Tp area() const;
     final double aspectRatio() const;
     final bool empty() const;

     _Tp width; //!< the width
     _Tp height; //!< the height

     cv.Size_!int* createSizeIntWH(int w, int h);

void main()
	Size_!int* sz = createSizeIntWH(200, 100);

More information about the Digitalmars-d-learn mailing list