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?

questionAnswers(5)

yourAnswerToTheQuestion