template <typename T> class A{ T i; };
みたいなクラスがあった時に,たとえばclass Aをstd::shared_ptrでくるんだ型をtypedefしたい.
普通に考えると,
template <typename T> typedef std::shared_ptr<A<T>> SharedA<T>;
って書けばいいように思うけど,これはまだサポートされてないらしい.
調べてみると,
C++でtemplate typedef | bettamodokiのメモ
typedef テンプレート | Microsoft Developer Network
typedefテンプレート | ぼく用あれこれまとめ@wiki
と,「C++0xではできるようになる」という感じの色んな記事が見つかる.
ではと思い,上の記事を -std=c++11 オプションをつけてコンパイルしてみたが通らず….
調べた結果,これはエイリアステンプレートというもので実現されているらしい.
How to typedef a template class? | stackoverflow
これによると,書き方は
template <typename T> using SharedA = std::shared_ptr<A<T>>;
でいいらしい.実際書いてコンパイルしてみたら通った.