Modelos variáveis e instrução switch?
Eu tenho a seguinte função que pode pegar N argumentos de tipos diferentes e os encaminha para N funções modeladas em cada tipo individual, dessa maneira (exemplo com dois argumentos):
template <typename T1, typename T2>
bool func(int& counter, T1 x1, T2 x2) {
switch (counter) {
case 0:
if (func2<T1>(x1)) {
counter++;
return true;
} else {
return false;
}
case 1:
if (func2<T2>(x2)) {
counter++;
return true;
} else {
return false;
}
default:
return true;
}
}
Quero escrever esta função com modelos variados, para que ele possa lidar com qualquer número de argumentos de uma maneira segura para o tipo. Eu posso ver uma solução usando funções recursivas, passando pelo contador e pelo índice variadico e comparando-os por igualdade, mas isso parece produzir um código muito menos eficiente do que a instrução switch acima (uma sequência de verificações se comparadas a uma tabela de salto )
Isso pode ser feito com eficiência usando a metaprogramação de modelos ou preciso fornecer sobrecargas para cada aridade?