"Shriramana Sharma via Digitalmars-d" wrote in message news:mailman.1464.1415039051.9932.digitalmar...@puremagic.com...

Hello. I really really need to be able to interface well with a C++
library which contains lots of classes if I am going to further invest
time into D.

Now from the http://dlang.org/cpp_interface I find out the current
status of built-in C++ interfacing support. I'm working on Linux so
using the COM support is not an option for me (whatever COM may be!).

That page is out of date.  Support has improved significantly since then.

A few queries:

1) How mature is the SWIG support for wrapping a library into D?
Specifically does the above SWIG support take advantage of the
built-in C++ support features like connecting directly to virtual
functions?

No idea.

2) Is there any further work underway to implement support for static
and non-virtual class member functions? Or is this not at all
possible? If so, why?

Work is complete. IIRC it was in the last release, you might need to grab master/an alpha for very latest stuff. Special member functions (dtor/operators) generally don't work.

3) The page speaks about having to integrate an entire C++ compiler
into the D compiler. Could the usage of libclang help here in having
to avoid writing a new C++ compiler module or am I talking through my
(non-existent) hat?

Yes. But adding a second compiler to the compiler is problematic even if you don't have the write the second compiler. You however could make a C++ binding generator with clang (see dstep).

Also, note that you can still use some aspects of C++ templates from D - you can pass a templated struct or class between the languages (but you will have to more or less re-write it on the other side). This is done in ddmd (magicport2/newmagic) with root.array.

You can also call templated functions with some hacks, if you are careful about ensuring they're instantiated on the C++ side. (ie use pragma(mangle))

So, a lot is possible, but when things go wrong you'll be fighting nasty abi and alignment bugs.

Reply via email to