2012-02-24

どうもエイリアステンプレートってうまい使い方が思いつかない

C++11では、エイリアス宣言のテンプレート化ができるようになったが、どうもうまい使い方が思いつかない。無論、私の言う「うまい使い方」とは、世間とは少し離れている。

唯一思いつくものとしては、メタ関数の呼び出しにnested typeが必要なくなるというものだ。

template < typename T >
using add_pointer = typename std::add_pointer< T >::type ;

template < typename T >
void f( T t )
{
    using namespace std ; 
    // めんどくさい
    typename add_pointer< T >::type a = nullptr ;
    // 簡単
    add_pointer< T > b = nullptr ;
}

エイリアステンプレートを使えば、nested typeを書かなくてよくなるばかりか、typenameすら必要なくなる。なぜならば、エイリアス宣言は文脈上、必ず型であるので、typenameを明示的に書く必要がないからだ。

No comments: