我有一个类,它基本上是一个double的包装器,允许将其值强制为静态值:
class ModelParameter
{
protected:
double val;
bool isForced;
double forcedVal;
public:
ModelParameter(void);
ModelParameter(double value);
double getValue(void);
void setValue(double value);
bool getIsForced(void);
void forceValue(double value);
void unforceValue(void);
};
但我希望能够将它用于任何原始类型,而不仅仅是双打。如果我像这样重新定义它:
template <class T>
class ModelParameter
{
protected:
T val;
bool isForced;
T forcedVal;
public:
ModelParameter(void);
ModelParameter(T value);
T getValue(void);
void setValue(T value);
bool getIsForced(void);
void forceValue(T value);
void unforceValue(void);
};
这意味着可以使用任何类型,无论它是否是原始的。有什么办法可以限制模板中使用的类型只使用原始类型吗?
答案 0 :(得分:14)
(注意:需要C ++ 11)
#include <type_traits>
template <class T>
class ModelParameter
{
static_assert(std::is_fundamental<T>::value, "error message");
...
};
但你为什么要这样做?
答案 1 :(得分:5)
一种方法是针对您的预期类型进行显式实例化。将所有实现移动到.cpp文件中并为这些类型实例化:
.cpp文件:
...
Definitions and implementation
....
class ModelParameter<float>;
class ModelParameter<int>;
...
然后,它适用于那些类型。