如何只接受C ++ 11中模板中的数字和字符串?

时间:2018-04-02 03:37:35

标签: c++ c++11 templates sfinae template-specialization

正如titlte所说,在C ++ 11中,我如何声明一个只接受数字(intlongfloatdouble)和字符串的模板?

template<typename T>
class CustomClass {
    public:
        T data;
};

2 个答案:

答案 0 :(得分:3)

将它放在类定义中的任何位置:

static_assert(std::is_arithmetic<T>::value ||
              std::is_same<T, std::string>::value,
              "Wrong argument type");

调整味道。

答案 1 :(得分:2)

例如,使用模板部分特化和模板默认值。

某事

template <typename T, bool =    std::is_arithmetic<T>::value
                             || std::is_same<T, std::string>::value>
class CustomClass;

template <typename T>
class CustomClass<T, true>
 {
   public:
      T data;
 };

所以你可以拥有

CustomClass<int>  cci;
CustomClass<std::string>  ccs;
// CustomClass<std::istringstream>  cciss; // compilation error