级联C++模板用法
Cascading C++ Templates Usage
我有两个类:
- ValueRange
- 菜单项
第三个类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,使其属性值是泛型的,这样我就可以拥有值范围为int、float、boolean等的menuItems。?
ValueRange<int>
是有效的类型。
ValueRange
没有类型就不是。
要实现通用MenuItem,您可以将MenuItem作为模板类,也可以将ValueRange扩展为非模板基类,例如:
class ValueRangeBase { /* some virtual members here... */ };
template <class T>
class ValueRange : public ValueRangeBase { /* same as before */ };
然后可以使用ValueRangeBase(但不是按值)作为泛型ValueRange。这在某些时候很有用,但可能不是你想要的。
只需将MenuItem
参数化为与ValueRange
:相同
template<class T>
class MenuItem
{
...
ValueRange<T> value;
...
void setValueRange(ValueRange<T> value) { ... }
...
};
相关文章:
- 这个指针在c++中的用法
- 当C++中需要自动删除时,这是静态的正确用法吗?
- libstdc++ 文件系统中未初始化的用法?
- 复制和交换习惯用法与移动操作之间的交互
- 类作用域的类型别名"using":[何时]方法中的用法可以先于类型别名?
- 命名参数习惯用法和(抽象)基类
- 省略号在C++中的所有用法
- () 在 C++ 11 中的特殊而奇怪的用法?
- 构造函数的用法
- 模板类中自动的类用法不完整
- 这里的 = 运算符有什么用法?
- 什么模板用法在阶乘中更好
- 如果可变长度元素的constexpr用法得到<>
- 为什么 setjmp/longjmp 的这种用法是未定义的行为?
- 访问提升:shared_ptr 主范围外崩溃,断言失败:px != 0.指针的正确用法是什么?
- C++ 中函数中 Const 用法之间的差异
- equal_to模板类C++用法
- PCL 中的 GICP 用法
- 向量的正确用法<int>::size_type
- C++命名空间的基本用法