C++ 模板参数包自动将 & 添加到其参数
C++ template parameter pack automatically adds & to its parameters
检查下面的代码。
#include <future>
template <class F, class... Args>
void do_something(F f, Args... args) {
using return_type = typename std::result_of<F(Args...)>::type;
// Why below gives an error?
std::packaged_task<return_type(Args...)> task(f, args...);
}
int func(int a, int b) {
}
int main() {
do_something(func, 1, 2);
}
packaged_task
构造函数给出如下错误。
error: no matching function for call to 'std::packaged_task<int(int, int)>::packaged_task(int (*&)(int, int), int&, int&)'
8 | std::packaged_task<return_type(Args...)> task(f, args...);
我不明白的是,为什么f
和args
在构造函数中成为引用类型? Args...
是 int, int
类型,而 args...
刚变成 int&, int&
。这是从哪里来的?
packaged_task没有您想要的签名。
编译器说没有这样的功能。 (可能下面有候选人)
检查下面的代码。
#include <future>
template <class F, class... Args>
void do_something(F f, Args... args) {
using return_type = typename std::result_of<F(Args...)>::type;
// Why below gives an error?
std::packaged_task<return_type(Args...)> task(f, args...);
}
int func(int a, int b) {
}
int main() {
do_something(func, 1, 2);
}
packaged_task
构造函数给出如下错误。
error: no matching function for call to 'std::packaged_task<int(int, int)>::packaged_task(int (*&)(int, int), int&, int&)'
8 | std::packaged_task<return_type(Args...)> task(f, args...);
我不明白的是,为什么f
和args
在构造函数中成为引用类型? Args...
是 int, int
类型,而 args...
刚变成 int&, int&
。这是从哪里来的?
packaged_task没有您想要的签名。
编译器说没有这样的功能。 (可能下面有候选人)