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
C++.
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
}
}
extern(C++){
cv.Size_!int* createSizeIntWH(int w, int h);
}
void main()
{
Size_!int* sz = createSizeIntWH(200, 100);
writeln(sz.width);
}
More information about the Digitalmars-d-learn
mailing list