C ++: Как проверить, какой тип данных используется в функции шаблона? - PullRequest
0 голосов
/ 24 ноября 2010

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

Как проверить, какой тип данных (или структуры) я получил в свой параметр функции шаблона?

Ответы [ 3 ]

6 голосов
/ 24 ноября 2010
Как мне проверить, какой тип данных (или структуры) я получил в свой параметр функции шаблона?

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

С другой стороны, если у вас есть только часть алгоритма , которая должна быть специфичной для типа, ничто не останавливает использование перегруженной подфункции, вызываемой из основной функции шаблона:

template <typename T>
bool IsFooBar(T Baz)
{
    // here the code is common for every type
    // ...
    // Here Baz must be modified in a type-speficic way:
    DoQuux(Baz);
    // ...
    return /* ... */;
}

// DoQuux is a regular overloaded function
void DoQuux(int & Baz)
{
    // ...
}

void DoQuux(double & Baz)
{
    // ...
}

void DoQuux(std::string & Baz)
{
    // ...
}

// ... other DoQuux ...
1 голос
/ 24 ноября 2010

Ваш шаблон должен иметь список параметров шаблона:

template <typename T, typename U>
void f(T t, U u) { }

Если вы вызываете f(x, y), то в шаблоне функции f, T и U - это типы, определяемыеаргументы x и y.(Конечно, вы можете делать гораздо более сложные вещи, но это самый простой вариант использования.)

0 голосов
/ 24 ноября 2010

Если частичной специализации шаблона недостаточно, вы можете использовать RTTI для сравнения типа объекта с типом другого. Например, если ваш шаблон принимает два аргумента типа, вы можете проверить typeid(T) == typeid(U), чтобы убедиться, что они одинаковые.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...