Я занимаюсь разработкой программы, требующей перегрузки нескольких типов, я использую шаблоны и хотел бы применить другой процесс для разных типов, поскольку при наличии нескольких типов было бы довольно грязно использовать операторы if, поэтому я бы хотел использовать операторы switch для очистки моего кода.
#include <iostream>
#include <cinttypes>
template<typename T>
T foo(T value)
{
//if statment works perfectly fine
if(typeid(T) == typeid(int32_t))
std::cout << "32 bit integer" << std::endl;
else if(typeid(T) == typeid(int64_t))
std::cout << "64 bit integer" << std::endl;
//...more conditions...//
//switch statment causes errors
switch(typeid(T)) //error: switch quantity not an integer
{
case typeid(int32_t): //error: could not convert ‘*(const std::type_info*)(& _ZTIi)’ from ‘const std::type_info’ to ‘<type error>’
std::cout << "32 bit integer" << std::endl;
//...
break;
case typeid(int64_t): //error: could not convert ‘*(const std::type_info*)(& _ZTIl)’ from ‘const std::type_info’ to ‘<type error>’
std::cout << "64 bit integer" << std::endl;
//...
break;
//...more cases...//
}
}
int main()
{
foo<int>(int32_t());
return 0;
}