gpt4 book ai didi

c++ - integral_constant 和模板参数推导

转载 作者:搜寻专家 更新时间:2023-10-31 01:50:55 25 4
gpt4 key购买 nike

我想将传递给函数的编译时间常量整数捕获为模板类型。 future 的目标是推出我自己的(非常有限的)表达式模板,该模板从非常简单的表达式(编译时常量 int 和 in 变量的总和)创建表达式,例如:-2*i + 3*k。

我开始很慢,我有以下代码:

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;
}

2*Foo(3) 的模板参数推导失败。我读到函数没有 constexpr 参数之类的东西。

有没有办法实现我想要的?

最佳答案

您可以在没有模板的情况下做到这一点。这个答案或多或少将@MooingDuck 的建议扩展为具体代码,您可能会发现这些代码更容易理解:

#include <type_traits>

using namespace std;

struct Foo {
constexpr Foo (int i) : i_(i) {}
int i_;
};

constexpr int operator*(int i, Foo j) {
return i * j.i_;
}

int main(void) {
integral_constant<int, 2> k;

constexpr int i = k * Foo(3);
static_assert(i == 6, "Error!");

constexpr int j = 2 * Foo(3);
static_assert(j == 6, "Error!");
}

关于c++ - integral_constant 和模板参数推导,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14484089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com