www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - Creating template libraries from C++/Boost template libraries

reply Lyle Moffitt <lylemoffitt gmail.com> writes:
I recently discovered D and absolutely love it. However, I feel 
like I can't really be productive with it yet because of the 
profound lack of libraries. I understand  that linking to C 
libraries is trivial and linking to C++ libraries is possible 
(eventually easy with tools like LDC'c Calypso), but I can't help 
but feel that doing these things beally hampers the power of the 
original library. This is primarily for C++, which loses all its 
generic programming capabilities.

To wit, if I want to use a class `foo<T>`, I have to specialize 
it for every type I plan to use it for in D. This means having 
either a huge library or having super-human precognition. What 
I'm wondering is, is it possible to specialize this template for 
a C++API version of D's Object and then re-use it as a template 
on the D-side whilst preserving its generic programming 
properties. I'd imagine this would have the same limitations as 
using `void*` for generic programming in C, but it would at least 
allow the retention of class information thought Object's 
inheritance tree.
Mar 13 2016
parent Chris Wright <dhasenan gmail.com> writes:
On Sun, 13 Mar 2016 12:11:12 +0000, Lyle Moffitt wrote:
 is it
 possible to specialize this template for a C++API version of D's Object
That idea would work. You probably need to define your own base class as extern(C++), though. On the plus side, that lets you add whatever you want to the interface you expose to C++.
 I'd imagine this would have the same
 limitations as using `void*` for generic programming in C, but it would
 at least allow the retention of class information thought Object's
 inheritance tree.
Should do.
Mar 13 2016