使用传递给模板函数的参数调用函数
问题描述:
如何调用传递给模板函数参数的函数? 我尝试的功能添加到后,我得到它的工作,所以我可以调用所有功能在矢量,有点像一个回调矢量使用传递给模板函数的参数调用函数
#include <Windows.h>
#include <iostream>
#include <functional>
template <typename... T>
void RunFunction(std::function<void> f, T... args)
{
f(args);
}
void testFunction(int x, int y)
{
std::cout << (x + y);
return;
}
int main()
{
RunFunction(testFunction, 1, 3);
}
答
你可能想:
template <typename F, typename... Ts>
void RunFunction(F f, Ts&&... args)
{
f(std::forward<Ts>(args)...);
}
void testFunction(int x, int y)
{
std::cout << (x + y);
}
int main()
{
RunFunction(testFunction, 1, 3);
}
由于
std::function<void>
不是你想要的,而是std::function<void(Ts...)>
。 f(args);
应该是f(args...)
。
然后Sig
不能推断出std::function<Sig>
为testFunction
。
'std :: function'是无稽之谈,你需要推导'f''的类型。你也忘了在调用'f'的时候扩展'args'。 –
LogicStuff