【发布时间】:2018-04-02 03:37:34
【问题描述】:
正如标题所说,在 C++11 中,我如何声明一个只接受数字(int、long、float 和 double)和字符串的模板?
template<typename T>
class CustomClass {
public:
T data;
};
【问题讨论】:
标签: c++ c++11 templates sfinae template-specialization
正如标题所说,在 C++11 中,我如何声明一个只接受数字(int、long、float 和 double)和字符串的模板?
template<typename T>
class CustomClass {
public:
T data;
};
【问题讨论】:
标签: c++ c++11 templates sfinae template-specialization
把它放在类定义的任何地方:
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
【讨论】: