我有两节课:
第三类Menu使用MenuItem类定义几个菜单项,每个菜单项都具有一定范围的值(int,float,boolean)。
我所做的是:
template <class T>
class ValueRange{
private:
T minValue;
T maxValue;
public:
void setMinValue(T minValue){this->minValue=minValue;};
void setMaxValue(T maxValue){this->maxValue=maxValue;};
ValueRange(){};
~ValueRange(){};
};
和
#include <string>
#include "ValueRange.hh"
class MenuItem{
private:
std::string name;
/*
* does not compile...
* error: invalid use of template-name 'ValueRange'
* without an argument list
* error: 'ValueRange' is not a type
*/
ValueRange value;
public:
/*
* does not compile...
* error: 'class MenuItem' has no member named 'value'
*/
void setValueRange(ValueRange value){this->value=value;}
MenuItem(){};
~MenuItem(){};
};
我如何实现其属性值是通用的MenuItem类,以便可以使MenuItems的值范围为int,float,booleans等?
最佳答案
C++中的类模板需要实例化。例如:
ValueRange<int>
是有效类型。
ValueRange
没有类型的不是。
为了实现通用的MenuItem,例如,您也可以使MenuItem成为模板化类,或者可以使ValueRange扩展非模板化基类,例如:
class ValueRangeBase { /* some virtual members here... */ };
template <class T>
class ValueRange : public ValueRangeBase { /* same as before */ };
然后,您可以将ValueRangeBase(虽然不是按值)用作通用ValueRange。有时这很有用,但可能并非完全符合您的要求。
关于c++ - 级联C++模板用法,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17262040/