On Monday, 23 October 2017 at 20:47:26 UTC, Walter Bright wrote:
On 10/18/2017 1:56 AM, Satoshi wrote:
Unable to publish closed source library without workaround and
ugly PIMPL design.
Consider this:
----------- file s.d ------------
struct S {
int x;
this(int x) { this.x = x; }
int getX() { return x; }
}
----------- file s.di ------------
struct S {
this(int x);
int getX();
}
--------------------------
User code:
import s;
S s = S(3);
writeln(s.getX());
Ta dah! Implementation is hidden, no PIMPL. Of course, inlining
of the member functions won't work, but it won't work in C++,
either, when this technique is used.
I.e. you can use .di/.d files just like you'd use .h/.cpp in
C++. The technique works with classes, too.
what about this:
---------- file.d
class Foo {
private int bar;
private string text;
void call() { }
}
----------- file.di
class Foo {
call();
}
and then I want to inherit from it (I have access to file.di only)
class Bar : Foo { // I cannot due I have misleading information
about size of Foo
}