C++ 在依赖类型的上下文中使用constexpr
简单的问题,这合法吗C++ 在依赖类型的上下文中使用constexpr,c++,templates,metaprogramming,C++,Templates,Metaprogramming,简单的问题,这合法吗 template<class T> struct foo { using type = std::conditional<IF_CONDITION<T>::value, constexpr int, int>::type; }; 模板 结构foo{ 使用type=std::conditional::type; }; 编译器错误:“错误:“constexpr”在此处无效” 还没有找到任何关于这个的文档。因为这是一个编译时条件,所以看
template<class T>
struct foo {
using type = std::conditional<IF_CONDITION<T>::value, constexpr int, int>::type;
};
模板
结构foo{
使用type=std::conditional::type;
};
编译器错误:“错误:“constexpr”在此处无效”
还没有找到任何关于这个的文档。因为这是一个编译时条件,所以看起来至少在理论上应该可以做到。来自标准:
constexpr说明符仅适用于
变量或变量模板或
函数或函数模板的声明。用constexpr声明的函数或静态数据成员
说明符隐式地是一个内联函数或变量(10.1.6)。如果函数或函数的任何声明
模板有一个constexpr说明符,那么它的所有声明都应该包含constexpr说明符。[注:
就constexpr说明符而言,显式专门化可能不同于模板声明。
-结束说明][注:函数参数不能声明为constexpr.-结束说明]
所以constexpr不应该在模板参数内
在您的情况下,可以使用以下命令创建类型专门化别名:
template<typename T>
using MyVec0 = Vector<T,0>;
模板
使用MyVec0=向量;
constexpr int
不是类型“const int”将是类型。“constexpr int”不是一种类型。我明白了,我认为它可以与const
相媲美。你知道他们是否有任何方法来模拟它吗?(除了类专门化)@JosephFranciscus在什么样的代码中,您需要一些条件constexpr?也许我们可以帮你。我正在写一个像Eigen
这样的库,所以如果行==0
那么一个对象就像Vector
,而不是我想要一个动态行值(即正则int
),否则我希望它是constepr
(编译时会知道)