@ Jarod42 хорошая мысль

я есть следующая функция, которая может принимать N аргументов разных типов и пересылать их N функциям, шаблонным для каждого отдельного типа, таким образом (пример с двумя аргументами):

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;
    }
}

Я хочу написать эту функцию с переменными шаблонами, чтобы она могла обрабатывать любое количество аргументов безопасным для типов способом. Я вижу решение, использующее рекурсивные функции, передавая счетчик и переменный индекс и сравнивая их на равенство, но это может показаться гораздо менее эффективным кодом, чем приведенный выше оператор switch (последовательность проверок if по сравнению с таблицей переходов). ).

Можно ли сделать это эффективно с помощью шаблонного метапрограммирования или мне нужно обеспечить перегрузки для каждой арности?

Ответы на вопрос(5)

Ваш ответ на вопрос