我想使用可变参数模板来帮助使用va-args解决问题。基本上,我想调用一个单一的函数,将一个“命令”和一个变量列表一起传递给函数,然后将这些参数派发到另一个函数中。Variadic Template Dispatcher
我已经实现了使用尝试和真实(但不是类型安全)va_list。以下是我使用可变参数模板进行的尝试。该示例不低于编译因为你很快就会发现为什么...
#include <iostream>
using namespace std;
typedef enum cmd_t
{
CMD_ZERO,
CMD_ONE,
CMD_TWO,
} COMMANDS;
int cmd0(double a, double b, double c)
{
cout << "cmd0 " << a << ", " << b << ", " << c << endl;
return 0;
}
int cmd1(int a, int b, int c)
{
cout << "cmd1 " << a << ", " << b << ", " << c << endl;
return 1;
}
template<typename... Args>
int DispatchCommand(COMMANDS cmd, Args... args)
{
int stat = 0;
switch (cmd)
{
case CMD_ZERO:
cmd0(args...);
break;
case CMD_ONE:
cmd1(args...);
break;
default:
stat = -1;
break;
}
return stat;
}
int main()
{
int stat;
stat = DispatchCommand(CMD_ZERO, 1, 3.141, 4);
stat = DispatchCommand(CMD_ONE, 5, 6, 7);
stat = DispatchCommand(CMD_TWO, 5, 6, 7, 8, 9);
system("pause");
return 0;
}
有没有人对我怎么能修改此功能,以正确地使用可变参数模板的想法?
为什么不使用普通的旧函数重载?定义一个函数'DispatchCommand',它需要4个参数,用一个参数重载它,等等。 – dyp 2014-09-10 19:13:57
编译时是否已知'COMMANDS cmd'? – Jarod42 2014-09-10 19:15:31
也许这将有助于:https://stackoverflow.com/a/25264850 – Deduplicator 2014-09-10 19:19:34