我想捕获编译时间传递给模板类型的函数的常量整数。未来的目标是推出我自己的(非常有限的)表达式模板,该模板从非常简单的表达式(编译时间常量int和变量之和)创建表达式,例如:-2 * i + 3 * k。integral_constant和模板参数扣除
我开始很慢,我有以下代码:2
struct Foo {
Foo (int i) : i_(i) {}
int i_;
};
template <int N> int operator*(std::integral_constant<int, N> i, Foo j) {
return N * j.i_;
}
int main(void) {
std::integral_constant<int, 2> k;
int i = k * Foo(3);
cout << i << endl;
int j = 2 * Foo(3);
cout << j << endl;
}
模板参数推导失败*美孚(3)。 我已经读过,没有这样的东西作为一个函数的constexpr参数。
有没有办法实现我想要的?
使operaator,构造,并导致“constexpr”。 –
感谢您的回复,我不能使它工作不幸:我修饰了j,运算符和Foo构造函数的定义,我仍然使用gcc-4.6和clang ++获得相同的模板演绎错误。你介意发布一个编译的修改版本吗?另外,一般来说,Foo可能不是一个constexpr,而是我的表达中更通用的术语。 – NickV
我怀疑你可以把2变成一个integral_constant。你必须至少写我(2)或类似的东西,我是一个宏。表达式模板中有什么用int_cst类型的成员int来存储数字2.不完全一样... –