繁体   English   中英

可变参数模板调用函数

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM