我想使用可變參數模板來幫助使用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