Class 模板:限制模板参数
Class templates: restrict the template parameter
我可以决定编译器可以生成哪些类型的模板 classes 吗?
假设我希望下一个 class 只能保存实数(浮点数、双精度)而不是整数类型。
//can I force T to be only real number types?
template<typename T>
class RealNumber
{
public:
T num;
RealNumber() : num() {}
void add(T x) { num += x; }
T get() const { return num; }
};
所以这应该会产生一个编译错误:
RealNumber<int> myrealnumber;
您可以断言该类型具有特定特征:
#include <type_traits>
template<typename T>
class RealNumber
{
static_assert(std::is_floating_point<T>::value, "Type must be floating point");
// and so on
};
如果类型不合适,这将导致编译时错误。
我可以决定编译器可以生成哪些类型的模板 classes 吗?
假设我希望下一个 class 只能保存实数(浮点数、双精度)而不是整数类型。
//can I force T to be only real number types?
template<typename T>
class RealNumber
{
public:
T num;
RealNumber() : num() {}
void add(T x) { num += x; }
T get() const { return num; }
};
所以这应该会产生一个编译错误:
RealNumber<int> myrealnumber;
您可以断言该类型具有特定特征:
#include <type_traits>
template<typename T>
class RealNumber
{
static_assert(std::is_floating_point<T>::value, "Type must be floating point");
// and so on
};
如果类型不合适,这将导致编译时错误。