gpt4 book ai didi

c++ - std::bind 和 std::function 术语不评估为 0 参数?

转载 作者:行者123 更新时间:2023-12-01 14:39:23 25 4
gpt4 key购买 nike

我正在研究通用类,该类将用于运行不同原型(prototype)的函数以进行算法的性能测试。

我卡住了,因为 std::function无法执行绑定(bind)的内容,这里是示例代码,并在发生错误的地方附上注释:

#include <utility>
#include <functional>

template<typename ReturnType>
class Performance
{
public:
template<typename... Args>
using Algorithm = std::function<ReturnType(Args...)>;

template<typename... Params>
void run(const Algorithm<Params...>& ref, const Algorithm<Params...>& target)
{
// ERROR: term does not evaluate as taking 0 args
ref();
target();
}
};

void bar1(int, int)
{
// algorithm 1
}

void bar2(int, int)
{
// algorithm 2
}

int main()
{
using test = Performance<void>;
using Algorithm = test::Algorithm<int, int>;

int x = 0;
int y = 1;

Algorithm ref = std::bind(bar1, std::ref(x), std::ref(y));
Algorithm target = std::bind(bar2, std::ref(x), std::ref(y));

test foobar;

foobar.run(ref, target);
}

最佳答案

问题是,std::function类型,即 Algorithm声明接受两个参数(类型为 int );调用它们时需要两个参数。

之后 std::bind应用时,返回的仿函数不带参数;参数( std::ref(x)std::ref(y) )已被绑定(bind)。 Algorithm应声明为

using Algorithm = test::Algorithm<>;

LIVE

关于c++ - std::bind 和 std::function 术语不评估为 0 参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61967784/

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