Fooをクラスじゃなくてテンプレートにしてmixinするという本質から外れた解法を思いつきました。
public import std.c.stdarg;
public template Foo(T) {
...(snip)...
private import foo;
void main() {
mixin Foo!(int);
int j;
j = foo("hello", 3, 23L, 4);
printf("j = %d\n", j);
assert(j == 30);
}
ぜんぜん解決している気分になりません。動くことは動くけどね...
と思ったけどこれもだめだ。baz.dとか作って
private import foo;
void baz() {
mixin Foo!(int);
}
とかをリンクすると'Previous Definition Different'とか言うんですけど。どうすれバインダー!