Вы можете использовать std::is_same
для проверки типов, и поскольку вы упомянули C ++ 17, вы можете использовать constexpr, если , который проверяет условие во время компиляции, и в соответствии с результатом оператор true / false будет отброшен.
template<class T>
const char* foo(){
if constexpr (std::is_same_v<T, float>) return "we have a float";
else if constexpr (std::is_same_v<T, int>) return "we have a int";
else if constexpr (std::is_same_v<T, double>) return "we have a double";
else return "unknown";
}
До C ++ 17 вы также можете использовать original if
, и условие будет проверено во время выполнения.
Кстати: строковый литерал стиля c имеет тип const char[]
и не может быть преобразован char*
начиная с C ++ 11, поэтому лучше изменить тип возвращаемого значения до const char*
.