【发布时间】:2015-08-24 16:42:02
【问题描述】:
我确信错误非常简单和愚蠢,但我看不到一个。代码如下:
#include <future>
template <typename ResultType>
class Foo
{
public:
template <typename ...Args>
void exec(const std::function<ResultType(Args...)>& task, Args&&... args) {}
};
int main()
{
Foo<void>().exec([](){});
return 0;
}
这是错误:
'void CAsyncTask::exec(const std::function &,Args &&...)' : 无法为 'const 推断模板参数 std::function &' 与 [ 结果类型=无效]
Foo<void>().exec<void>([](){}) 也不起作用(我更希望不必手动指定 Args 类型)。
关于建议答案的更新:以下代码确实有效。
CAsyncTask<void>().exec(std::function<void ()>([](){}));
但是这个问题真的没有解决方法吗?我可以以某种方式扩展我的模板来推断 lambda 参数吗?
【问题讨论】:
标签: c++ templates c++11 variadic-templates