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:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.