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:
Post a Comment