如何将操作员发送到 std::async?

How do I send an operator into std::async?

我目前有一个工作示例:

#include <iostream>
#include <future>
int main() {
    auto result = std::async([](int left, int right){return left + right;}, 1, 1);
    std::cout<<"from async I get "<<result.get()<<"\n";

    return 0;
}

这个 lambda 只是一个简单的加法,但我无法用运算符替换它:

auto result = std::async(operator+, 1, 1);

错误显示 use of undeclared 'operator+'

如何修复它,使用运算符替换 lambda?

您不能拥有指向内置运算符 see here 的引用或函数指针,但您可以使用 <functional> header:

中的实用程序之一
auto result = std::async(std::plus<>{}, 1, 1);

如果您沉迷于将引用传递给运算符,则可以使用包装器类型:

struct Int { int value; };

Int operator+(const Int& lhs, const Int& rhs)
{
    return Int{lhs.value + rhs.value};
}

auto result = std::async(operator+, Int{1}, Int{1});
std::cout<<"from async I get "<<result.get().value<<"\n";

但这是为了了解什么有效,什么无效,我不建议您这样做:)