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

您可以只使用静态 const 变量:

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

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