H1 2015 - C++ integration

Paolo Invernizzi via Digitalmars-d digitalmars-d at puremagic.com
Sun Feb 15 12:05:23 PST 2015


On Sunday, 15 February 2015 at 19:44:39 UTC, Guillaume Chatelet 
wrote:
> On Sunday, 15 February 2015 at 15:37:33 UTC, Paolo Invernizzi 
> wrote:
>> That's a great work.
>
> Thx :)
>
>> Guillaume, I'll try to ask this question again.
>>
>> I'm wrapping the C++ API of OpenCV [1], and it works great.
>> I'm using a D struct for std::string instead of D class, 
>> because I agree with your findings that's more convenient.
>>
>> But, in case I would like to use a D class for std::string, 
>> how to call a C++ function that takes a std::string&? It's 
>> feasible right now?
>>
>> I think we need more control over the mangle in extern(C++)...
>>
>> [1] http://docs.opencv.org/trunk/modules/refman.html
>
> I just pushed a new commit which shows how to do it with 
> classes as well:
> https://github.com/gchatelet/dlang_cpp_std/commit/892a736386ecd84516b7330fef4ee75f1b4d2ad3
>
> This requires to pervert the type system though so it's pretty 
> unsafe.
> I added the two following helper functions to reinterpret a D 
> reference semantic as a C++ value semantic :
> const (basic_string*) c_ptr() const { return cast(const 
> std_string*)(this); }
> ref const(basic_string) c_ref() const { return *cast(const 
> std_string*)(this); }
>
> You can then call the C++ function :
> getStringSize(s.c_ref);
>
> This is cumbersome and unsafe but workable.
>
> Because the C++ function contains a const ref to string we have 
> to provide the correct mangling manually anyways because of 
> mangling bug https://issues.dlang.org/show_bug.cgi?id=14178

Thanks for sharing!
---
/P



More information about the Digitalmars-d mailing list