我如何确定传递给我的模板函数的类型是数字类型?
这是我的功能:
template <typename T>
T toStdNumber()
{
type_info t_info = typeid(T);
/* ... Converting my class to T if it's numeric type ... */
}
我必须在2003年标准中执行此操作,因此<type_traits>
不是解决方案。
答案 0 :(得分:7)
静态断言应该可以解决问题:
#include <type_traits>
template <typename T>
T toStdNumber()
{
static_assert(std::is_arithmetic<T>::value, "Not an arithmetic type");
// ...
}
See cppreference用于类型分类。
答案 1 :(得分:0)
由于我没有找到C ++ 03的简洁解决方案,我决定使用这种令人毛骨悚然的构造
if (
typeid(T) != typeid(short int) &&
typeid(T) != typeid(int) &&
typeid(T) != typeid(long int) &&
typeid(T) != typeid(long long int) &&
typeid(T) != typeid(unsigned short int) &&
typeid(T) != typeid(unsigned int) &&
typeid(T) != typeid(unsigned long int) &&
typeid(T) != typeid(unsigned long long int)
)
throw bad_typeid();