我有一个类,它基本上是一个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); };
但我希望能够将它用于任何原始类型,而不仅仅是双打.如果我像这样重新定义它:
templateclass 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); };
这意味着可以使用任何类型,无论它是否是原始的.有没有什么办法可以限制模板中使用的类型只使用原始类型?
一种方法是针对您的预期类型进行显式实例化.将所有实现移动到.cpp文件中并为这些类型实例化:
.cpp文件:
... Definitions and implementation .... class ModelParameter<float>; class ModelParameter<int>; ...
然后,它适用于那些类型.
(注意:需要C++ 11)
#include <type_traits> template <class T> class ModelParameter { static_assert(std::is_fundamental<T>::value, "error message"); ... };
但是你为什么要这样做呢?