C++ interfaces and D dynamic arrays
Jacob Carlborg
doob at me.com
Tue Jan 2 17:22:12 UTC 2018
On 2018-01-02 17:48, Void-995 wrote:
> Hi, everyone.
>
> I would like to have an interface that can be implemented and/or used
> from C++ in D. One of the things I would like to keep is the nice
> feature of D dynamic arrays in terms of bounding checks and "length"
> property.
>
> Let's assume:
>
> extern (C++) interface ICppInterfaceInD {
> ref const(int[]) indices() const;
> }
>
> class A: ICppInterfaceInD {
> private int[] m_indices;
>
> extern (C++) ref const(int[]) indices() const {
> return m_indices;
> }
> }
>
> All I want is keeping const correctness like in C++ so no one can modify
> m_indices and use that as property within const pointer. I thought it
> may be passed to C++ as some struct of sort:
>
> struct wrappedArrray(T) {
> size_t length;
> T* ptr;
> }
>
> but it just don't want to be friendly with me.
>
> How should I rethink the interface with being D-way efficient when using
> that interface inside of D?
I would recommend using a struct as above or pass the pointer and length
separately. Then create a function on the D side that coverts between
the struct and a D array.
Note that you cannot use a D array in a C++ interface, it will fail to
compile.
--
/Jacob Carlborg
More information about the Digitalmars-d-learn
mailing list