/ / メモ
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]
トラックバック http://mikanya.dip.jp/memo/2008-07-01-1