[英]variadic template to call a function
我正在尝试编写一个如下所示的teamplate函数:
template<T FuncPtr, Params...>
void CallFunction(Params...)
{
FuncPtr(Params...);
}
用法示例:
typedef void (__stdcall* Test_t)(int a1, bool a2, char* a3);
Test_t fn = ....; //pointer obtained somehow
CallFunction<fn>(10, true, "Hello");
这样有可能吗? 我不知道如何使用参数包来解压缩它,因此包服务器的每个成员都作为参数。
我建议将其重写为如下形式:
#include <iostream>
template<class Fun, class... Args>
void CallFunction(Fun fun, Args&&... args)
{
fun(std::forward<Args>(args)...);
}
void fn(int a1, bool a2, char const* a3)
{
std::cout << a1 << a2 << a3;
}
int main()
{
CallFunction(fn, 10, true, "Hello");
}
现场例子 。 我认为您可以从中推断出适当的...
语法(在参数列表中的class...
之后,但在arg...
之后)中用于在调用站点解包参数。
std::forward
用于区分左值和右值。 通常,也可以通过将函数指针(或通常为可调用对象)作为常规函数参数而不是显式模板参数来使用参数推导。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.