2008-07-02
昨日のは、無理やりすぎた。
普通に書いてみた。
class HelloWorld { void say() { writefln("Hello, World!!"); } } template OpNewCreator(T) { T Create() { return new T(); } } class HelloWorldManager(alias T) { alias T.Create Create; } class HelloWorldManager2(alias T) { alias T!(HelloWorld).Create Create; } class HelloWorldManager3(alias T = OpNewCreator) { alias T!(HelloWorld).Create Create; } void main() { HelloWorldManager!(OpNewCreator!(HelloWorld)) hc; auto h = hc.Create(); h.say(); HelloWorldManager2!(OpNewCreator) hc2; auto h2 = hc2.Create(); h2.say(); HelloWorldManager3!() hc3; auto h3 = hc3.Create(); h3.say(); }