Cryさん(id:Cryolite:20040714)がTypedefTemplatesについて書いてくれたので、私もその話題に乗せてもらうことに・・・

こういうのはトラックバックってのをしたほうがいいのかもしれないけど、ブログの何たるかを知らないぱせりは、もちろんトラックバックのやり方を知らない。orz

typedef templatesの詳しい解説はExceptionalC++で有名なハーブ様のpaperがあるのでそっちを見てください。

http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2002/n1406.pdf

typedef templatesを使えるとすると今までがんばってクラスでやってた一部がスマートになる。例えばこんな感じ。


template
typedef T remove_pointer;

template <>
typedef T remove_pointer

もちろん普通に


template
typedef std::list > myList;

なんて使い方もできるといいと思う。

ただ私が一番あったら便利だなぁと思うのはtypedef templatesで定義したシノニムを実際のクラスとして扱えることかな。


template
typedef X MyAlias;

template <>
struct MyAlias
{
//....
};

ジェネリックなT型に対してはMyAliasはXのシノニムであり、Tがcharの場合は実際のMyAliasという特殊化されたstructが使われる。

それなら別にForMyAliasクラスを作ってあげて、そのクラスをMyAliasにタイプしてあげればいいと思うかもしれない。

こんな感じに・・・


template
typedef X MyAlias;

struct ForMyAlias
{
//....
};

template <>
typedef ForMyAlias MyAlias;

でもForMyAliasは実際MyAliasとして機能することを前提に作っている訳だから

何もForMyAliasとMyAliasを分けて考えて複雑にすることはないんじゃないかなぁと思う。

しかもこれは二者択一じゃないので、MyAliasが定義できても依然としForMyAliasは定義できるし。


template
typedef X MyAlias;

template <>
struct MyAlias
{
//....
};

ForMyAliasをめんどくさがらないで作れば同じことができるんだから、これは書き方の問題でしょという意見もあるかもしれないけど

それはtypedef templatesとrebindの話そのままな気もする。