If [1] gets merged we will have a situation where code[2] is required to interoperate with D's slices from C++. I think we should have an official repository where such code and documentation lives (i.e. on the dlang github). This would also be a good place to have links to other interoperability successes in D like pyd, dpp, embedr, luad, autowrap etc. and put the D interoperability story out there, coherently and in one place.

Thoughts?

[1]: https://github.com/dlang/dmd/pull/8120
[2]:
template<typename T>
struct __dslice
{
    size_t length;
    T* ptr;

    __dlisce(size_t len, T* p)
    {
        length = len;
        ptr    = p;
    }
    /**
     * Container constructor:
     *
* Accepts any type U that satisfies `U u; size_t i = u.size(); T* = u.data();`
     * This includes types like:
     *      std::vector,
     *      std::string,
     *      std::string_view
     *      std::span
     *
* TODO: Constrain this properly such that U::value_type == T (modulo const)
     * TODO: Make this const correct
     */
    template<typename U>
    __dslice(U& u)
    {
        length = u.size();
        ptr    = const_cast<T*>(u.data());
    }
};

Reply via email to