正如titlte所说,在C ++ 11中,我如何声明一个只接受数字(int
,long
,float
和double
)和字符串的模板?
template<typename T>
class CustomClass {
public:
T data;
};
答案 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