类模板:限制模板参数
问题描述:
我可以决定编译器可以生成哪些类型的模板类?类模板:限制模板参数
说我希望下一个类只能够容纳实数(float,double)而不是整数类型。
//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
};
这将在类型会导致编译时错误不适合。
SFINAE与is_integral。 – 2015-03-02 17:02:44
@LuchianGrigore:SFINAE是用于控制重载分辨率的函数模板。这需要'static_assert'和'is_floating_point'。 – 2015-03-02 17:03:55