如何将操作员发送到 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";
但这是为了了解什么有效,什么无效,我不建议您这样做:)
我目前有一个工作示例:
#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";
但这是为了了解什么有效,什么无效,我不建议您这样做:)