ssb*_*ssb 5 c++ future argument-unpacking variadic-templates c++11
我有两个函数f
和g
.f
异步计算它的返回值并返回一个未来.现在,基于几个返回值f
,我想调用g
,但我想确保值的计算f
并行发生.
请考虑以下代码:
template <typename T>
std::future<T> f(T& t);
template <typename... T>
void g(T&&... t)
template <typename... T>
void call_wrapper(T&&... t) {
auto f1 = f(t1); // How do I set the values of f1... fn
auto f2 = f(t2);
...
g(f1.get(), f2.get()....); // How do I call g
}
Run Code Online (Sandbox Code Playgroud)
如何从函数的可变参数模板T
中解压缩类型call_wrapper
?
[编辑2:我想我误解了这个问题,我忘了subzero想要返回std::future
s并且只是认为唯一的问题是参数包语法.希望在我的第一次编辑中使用辅助函数应该可以工作]
你可以简单地做:
template <typename... T>
void call_wrapper(T&&... t) {
g(f(std::forward<T>(t)).get()...);
}
Run Code Online (Sandbox Code Playgroud)
除非我误解了你想做什么.
Edit1:如果你想做其他事情,可以在两次调用中划分函数,如下所示:
template<typename... T>
void helper(T&&... t) {
// ...
g(std::forward<T>(t).get()...);
}
template <typename... T>
void call_wrapper(T&&... t) {
helper(f(std::forward<T>(t))...);
}
Run Code Online (Sandbox Code Playgroud)