C ++ переключение регистра с помощью typeid - PullRequest
0 голосов
/ 20 апреля 2020

Я занимаюсь разработкой программы, требующей перегрузки нескольких типов, я использую шаблоны и хотел бы применить другой процесс для разных типов, поскольку при наличии нескольких типов было бы довольно грязно использовать операторы 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;
}
...