Pimpl-idiom in the D programming language

Viewed 311

D has a fantastic module system which reduces compilation times dramatically compared to C++. According to the documentation D still provides opaque structs and unions in order to enable the pimpl idiom. My question is: How can I declare a nested struct (or union) in one module and define it in another one? What is the syntax for that?

In C++ the header would look like this

struct S { 
    ... 
    struct Impl; 
    Impl * p; 
};

and the implementation file (cpp-file) would use some interesting-looking ::-syntax like this:

#include "header.h"
struct S::Impl { 
    ... 
};

How do I implement the same in D?

3 Answers
Related