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

How to accept only numbers and strings in templates in C++11?

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

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

将其放在 class 定义中的任意位置:

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

根据口味调整条件。

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

类似于

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