如何确保模板类型是数字类型?

时间:2014-10-05 21:43:32

标签: c++ templates

我如何确定传递给我的模板函数的类型是数字类型?

这是我的功能:

template <typename T>
T toStdNumber()
{
  type_info t_info = typeid(T);
  /* ... Converting my class to T if it's numeric type ... */
}

我必须在2003年标准中执行此操作,因此<type_traits>不是解决方案。

2 个答案:

答案 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();