Получение типа переданного аргумента в переменной функции - PullRequest
2 голосов
/ 25 августа 2010

Есть ли способ получить тип передаваемых аргументов без явного указания типа в строке в качестве одного из аргументов?

Чтобы добавить к сообщению только сейчас, в основном я хочу сделать

, если это тип A

функция вызоваA

иначе, если это тип B

вызов функции B.

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

Спасибо.

Ответы [ 2 ]

3 голосов
/ 25 августа 2010

Вариационный шаблон наверняка решит это:

#include <cstdio>

void function_a(int a) { printf("int %d\n", a); }
void function_b(double b) { printf("double %f\n", b); }

void select(int n) { function_a(n); }
void select(double d) { function_b(d); }

template <class T>
void variadic(T a)
{
    select(a);
}

template <class T, class ...Args>
void variadic(T a, Args... args)
{
    select(a);
    variadic(args...);
}

int main()
{
    variadic(1, 3, 2.1, 5.6, 0);
}

Но это доступно только в C ++ 0x.

Если вы имеете в виду переменные функции, как в var_args, то эти аргументы не несут никакой информации о типах.

3 голосов
/ 25 августа 2010

Нет, если они могут различаться по типу, вам нужно передать какую-то структуру, указав, что это за типы.

Также обратите внимание, что разрешены только определенные типы, и лучше всего ограничить ихтолько указатели.

Variadic шаблоны решают эту проблему.Вам понадобится новый компилятор, а шаблоны должны находиться в заголовочных файлах.Для каждой уникальной последовательности типов аргументов создается отдельная функция.

...