Я хотел бы использовать вариативные шаблоны, чтобы помочь решить проблему с помощью va-args. В принципе, я хочу назвать сингулярную функцию, передать в функцию «команду» вместе с переменным списком аргументов, а затем отправить аргументы другой функции.Диспетчер шаблонов Variadic
Я реализовал это, используя проверенный (но не безопасный тип) 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;
}
Кто-нибудь есть идеи о том, как я могу изменить эту функцию, чтобы правильно использовать VARIADIC шаблоны?
Почему вы не используете обычную перегрузку функций? Определите функцию 'DispatchCommand', которая принимает 4 параметра, перегружает ее той, которая занимает пять и так далее. – dyp
«COMMANDS cmd» известно во время компиляции? – Jarod42
Возможно, это поможет: https://stackoverflow.com/a/25264850 – Deduplicator