std::bind 和 std::function 项不评估为采用 0 个参数?

std::bind and std::function term does not evalue as taking 0 arguments?

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

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

#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))已绑定。 Algorithm 应声明为

using Algorithm = test::Algorithm<>;

LIVE