以下代码将无法构建,任何有关原因的反馈将不胜感激。
void bar(std::string str, int& a, int& b)
{
}
template<typename T, typename ... Args>
void foo(std::function<void(T, Args...)> fcn, Args ... args)
{
// Some code that calls fcn
}
void run()
{
int a = 3;
int b = 5;
foo<std::string, int&, int&>(bar, a, b);
}
这是这个SO答案中提出的第一个解决方案的修改实现。
IDE 在调用
foo
的行上给出以下错误:
C++ 模板
void foo(std::function fcn, Args ...args) 没有函数模板“foo”的实例与参数列表匹配
参数类型有:
(void (std::string str, int &a, int &b), int, int)
单独测试,似乎通过模板参数传递
fcn
参数没问题。问题似乎在于传递一个函数参数,该函数可以接受可变参数模板参数。
函数(指针)不是
std::function
,所以不能用于推导。
您可能会在这种情况下使
Ts...
不可推论
template<typename T, typename ... Args>
void foo(std::function<void(T, std::type_identity_t<Args>...)> fcn, Args ... args)
{
// Some code that calls fcn
}