Как мне проверить, какой тип данных (или структуры) я получил в свой параметр функции шаблона?
Почему ты должен? Если вы хотите использовать шаблон, это потому, что код одинаков для всех типов. В противном случае вы просто используете обычные перегруженные функции.
С другой стороны, если у вас есть только часть алгоритма , которая должна быть специфичной для типа, ничто не останавливает использование перегруженной подфункции, вызываемой из основной функции шаблона:
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 ...