On Thursday, 16 August 2012 at 14:58:23 UTC, R Grocott wrote:
C++'s fragile ABI makes it very difficult to write class libraries without some sort of workaround. For example, RapidXML and AGG are distributed as source code; GDI+ is a header-only wrapper over an underlying C interface; and Qt makes heavy use of the Pimpl idiom, which makes its source code much more complex than it needs to be. This is also a major problem for any program which wants to expose a plugin API.

Since pimpl is useful but messy, given D's metaprogramming capabilities, maybe what we need is a Pimpl template in Phobos:

// The implementation struct.
struct SImpl {
   int a, b, c;

   void fun() {}
}

// Automatically generate code for the Pimpl wrapper.
alias Pimpl!SImpl S;

auto s = new S;

On the other hand, IIUC Pimpl doesn't solve the vtable part of the problem, only the data members part. (Correct me if I'm wrong here, since I admit to knowing very little about the fragile ABI problem or its workarounds.)

Reply via email to