gpt4 book ai didi

c++ - 使用用户定义的参数调用 future/async 并调用类方法

转载 作者:行者123 更新时间:2023-11-30 04:55:27 27 4
gpt4 key购买 nike

是否可以异步调用函数并使用类方法返回值:

void A::GetReply()
{
auto fn = std::async([this](const struct mydata& msg)
{
oncall(msg);
});
}
int A::onReply(const struct mydata& msg)
{
return msg.value;
}

我得到编译错误:

6>: error C2672: 'std::async': no matching overloaded function found
6>: error C2893: Failed to specialize function template 'std::future<_Invoke_traits<void,_Callable,decay<_ArgTypes>::type...>::type> std::async(_Fty &&,_ArgTypes &&...)'
6> with
6> [
6> _Callable=decay<_Ty>::type
6> ]
6>: note: With the following template arguments:
6>: note: '_Fty=A::{ctor}::<lambda_75cbb6e549dc12613fd9546c1d31aa61>'
6>: note: '_ArgTypes={}'
6>: error C2780: 'std::future<_Invoke_traits<void,_Callable,decay<_ArgTypes>::type...>::type> std::async(std::launch,_Fty &&,_ArgTypes &&...)': expects 3 arguments - 1 provided
6> with
6> [
6> _Callable=decay<_Ty>::type
6> ]
6>c:\program files (x86)\microsoft visual studio\2017\professional\vc\tools\msvc\14.15.26726\include\future(1821): note: see declaration of 'std::async'

以异步方式启动并获取异步函数调用的返回值的“ future ”函数调用的正确实现方式是什么?

最佳答案

问题

auto fn = std::async([this](const struct mydata& msg)
{
oncall(msg);
});

是 lambda 期望参数,但您没有将参数传递给 async。您必须将要异步运行的函数及其所有参数传递给 async。如果 msg 是该类的成员,那么您可以将签名更改为

auto fn = std::async([this]()
{
oncall(msg);
});

然后msg就是this->msg

关于c++ - 使用用户定义的参数调用 future/async 并调用类方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53046574/

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