【发布时间】:2012-05-12 20:33:31
【问题描述】:
模板化类的一个常见模式是模板参数在类内部进行了类型定义,以便于访问:
#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");
【问题讨论】:
-
为什么不优雅?
-
这是一个方法调用;为什么这是个问题?
-
这不是一个“正常”的方法调用,而是一个
constexpr,一个在编译时解析的表达式。出于这个原因,如果可能的话,我更喜欢它看起来不同。