gpt4 book ai didi

c++ - 级联 C++ 模板用法

转载 作者:行者123 更新时间:2023-11-30 01:21:57 26 4
gpt4 key购买 nike

我有两个类:

  1. 值范围
  2. 菜单项

第三类 Menu 使用 MenuItem 类来定义多个菜单项,每个菜单项都有一个范围的值(整数、 float 、 bool 值)。

我所做的是:

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 类,以便我可以拥有值范围为整数、 float 、 bool 值等的菜单项?

最佳答案

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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com