1

テンプレート化されたクラスの一般的なパターンは、簡単にアクセスできるように、テンプレート引数がクラス内で型定義されていることです。

#include <type_traits>
template<class T> struct Foo{
    typedef T type;
};
static_assert(std::is_same<Foo<int>::type,int>::value,"");

非型テンプレート引数で同じことを行うにはどうすればよいですか? 私は次のアイデアしか思いつきませんでしたが、もっとエレガントなものが必要ですか?

template<int I> struct Bar{
   constexpr static int getI(){ return I; }
};
static_assert(Bar<5>::getI()==5,"error");
4

2 に答える 2

3

を使用するかもしれませんがenum、これの有用性は私にはいくらか制限されているようです...

#include <iostream>
using namespace std;

template<int N> struct Foo
{
    enum {value_ = N};
};

int main(int argc, char* argv[])
{            
    Foo<42> foo;

    cout << foo.value_;

    return 0;
}

この種のことはテンプレートのメタプログラミングで頻繁に行われることを含めるように編集します。

于 2012-05-12T20:38:26.237 に答える
3

static const 変数を使用できます。

template<int I> struct Bar{
    static const int i = I;
};

static_assert(Bar<5>::i==5,"error");
于 2012-05-12T20:38:34.943 に答える