背景:
基于上述要点写一个可变参数的函数模版,调用,具体代码如下:
std::shared_ptr<std::future<std::invoke_result_t<FUN,Args...>>>
packet_call(FUN fun, Args ...args)
{
using RET=std::invoke_result_t<FUN, Args...>;
RET value{};
std::function<RET()> async_call= std::bind(fun, args...);
std::shared_ptr<std::packaged_task<RET()>> shPacket = std::make_shared<std::packaged_task<RET()>>(async_call);
std::future<RET> future = shPacket->get_future();
std::shared_ptr<std::future<RET>> shFuture = std::make_shared<std::future<RET>>(std::move(future));
std::thread th([shPacket](){
(*shPacket)();
return;
});
th.detach();
return shFuture;
}
int main()
{
auto value = packet_call(sum, 1,2);
std::cout<<value->get()<<std::endl;
return 0;
}