带有模板化类的常见模式是模板参数在类中是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");
答案 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");