如何使整数模板参数作为模板化的类成员访问?

时间:2012-05-12 20:33:32

标签: c++ templates

带有模板化类的常见模式是模板参数在类中是typedef,以便于访问:

#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");

2 个答案:

答案 0 :(得分: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;
}

编辑以包含这种事情经常在模板元编程中完成。

答案 1 :(得分:3)

您可以使用静态const变量:

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

static_assert(Bar<5>::i==5,"error");