如何在 C++11 的模板中只接受数字和字符串?
How to accept only numbers and strings in templates in C++11?
正如标题所说,在 C++11 中,我如何声明一个只接受数字的模板(int
、long
、float
和 double
)和字符串?
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
正如标题所说,在 C++11 中,我如何声明一个只接受数字的模板(int
、long
、float
和 double
)和字符串?
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