On Tuesday, 16 February 2016 at 09:04:48 UTC, Daniel Murphy wrote:
I'm starting to think we should give up on implementing C++
support in the language and move it to the library.
eg
mixin(cppFunctionBinding("unsigned long long
NameSpace::myFunc(char * const && x, long double y)");
expands to some combination of pragma(mangle) and extern(C++)
With the limitation that only declarations can be parsed, it's
not that bad to implement a ctfe C++ parser, and we can stop
the creep of C++ features and hack into D.
As a bonus, it could generate wrappers when we really can't
match the semantics well enough.
I agree with the principle, but not as a library function,
because:
1. you want virtual functions to work out ok
2. making D more reliant on macroish string processing is not good
You would need something along the lines of:
1. «extern "C++"» the essence of the class definition in plain
C++ syntax
2. add to this syntax a translation for each parameter what it
means in D.
E.g.
extern "C++" {
class X {
mutable int rc;
virtual func1(const A* ptr); @reinterpret(ptr, head_const_ptr!A)
virtual func2(const A* ptr); @reinterpret(ptr, const A*)
virtual func3(A* ptr);
virtual func4(const A* ptr); @reinterpret(ptr, const_rc!A*)
};
}