2004年5月14日金曜日

typedef template?

templateのパラメータを2つ持っているクラスがあるとして、
そのうち1つだけを決めてもう片方をtemplateパラメータとして残しておきたい
ということがありました。

template<class A, class B> class Foo .....

template<typename T> typedef Foo<int, T> IntegerFoo; // IntegerFoo<string> のように使用する(したい)


ところがこれできないんですね。。。あちこちでC++の規格に追加してよと提案されてはいるようですが。

というわけで、今回はtypedefするのではなくて、派生クラスを定義して同じことを実現しました。

template<typename T> class IntegerFoo : public Foo<int, T> {};


ただこの手法はもちろんFooが派生可能であるということが前提です。

調べてみると他にもいろいろなアプローチがあるようです。
MSDN Deep C++ Typedef Templates

3 コメント:

匿名 2004年5月16日 0:14  

へぇー, 不便ですなぁ.
.NETでもWhidbeyでテンプレートが追加されるけどその辺はどうなってんだろね.
ところで, どんなときに,
template class Foo
なんて定義したくなんのかな?

匿名 2004年5月17日 18:42  

ライブラリを作ってると、
「汎用的にするためにテンプレートパラメータをいくつかつけたけど、とあるパラメータはほとんどこのケースでしか利用しないから、ユーザーにいちいち指定させるのは面倒。よく使うテンプレートパラメータを最初から与えたaliasを用意しておこう」
ということがあったので、template typedefが必要になりました。
用意したいaliasが1つならデフォルトのtemplateパラメータを与えることでできるけど、複数のaliasを作りたい場合はtemplate typedefになるね。

匿名 2004年5月18日 0:00  

ライブラリは作るもんじゃねえ!使うもの(笑)

  © Blogger template 'Isolation' by Ourblogtemplates.com 2008

Back to TOP