2008-07-01
いまだと Modern C++ Design が読めそう。
class HelloWorld { void say() { writefln("Hello, World!!"); } } template OpNewCreator(T) { template OpNewCreator(A=T) { A Create() { return new A(); } } } class HelloWorldManager(alias T) { mixin T; } class HelloWorldManager2(alias T) { alias T!(HelloWorld) F; mixin F; } class HelloWorldManager3(alias T = OpNewCreator) { alias T!(HelloWorld) F; mixin F; } void main() { auto hm = new HelloWorldManager!(OpNewCreator!(HelloWorld)); auto h = hm.Create(); h.say(); auto hm2 = new HelloWorldManager2!(OpNewCreator); auto h2 = hm2.Create(); h2.say(); auto hm3 = new HelloWorldManager3!(); auto h3 = hm3.Create(); h3.say(); }
ポリシークラスで書くのは、つまらないので、
D言語の mixin で書いてみた。
template を実体化すると template になるように書く。
参考
1章 1.5 ポリシーとポリシー・クラス - Modern C++ Designを読む(1)
Modern C++ Design勉強日記 テンプレートでポリシーを使おう!!(1)
Referrer (Inside):
[2008-07-02-1]