ABAさんがやりたいとおっしゃっていたことはこういうことではなかろうか。
private import std.string; abstract class Base { void p(); } class C1: Base { void p() { printf("C1\n"); } } class C2: Base { void p() { printf("C2\n"); } } class C3: Base { char msg; this(char m) { msg = m; } void p() { printf("C3 %s\n", toStringz(msg)); } } int main() { Base delegate() factories; factories ~= delegate Base() { return new C1; }; factories ~= delegate Base() { return new C2; }; factories ~= delegate Base() { return new C3("hogehoge"); }; Base bases; foreach (Base delegate() f; factories) { bases ~= f(); } foreach (Base b; bases) { b.p(); } return 0; }
実際使うときは template 化しておくと毎回 delegate の使い方に悩まなくてすむかと。でも多分 ActorPool の第二引数に使うんでしょうし、これ全体を template class にしちゃった方が良い気もしますね。 Java っぽいキャストもなくなりますし。