typedefをテンプレート化したい(エイリアステンプレートというらしい)

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>>;

でいいらしい.実際書いてコンパイルしてみたら通った.

コメントする