pro*_*ton 2 c++ abstract-class
我有一个抽象类,例如一个代表几何形状的类。我将有从 继承的具体类Shape,例如矩形和三角形。
我想遍历一个形状所组成的点(另一个类),因此Shape必须为其提供一个接口。迭代应该是这样的:
for(Point p : shapeObject){ ... some code}
Run Code Online (Sandbox Code Playgroud)
但我不希望Shape该类为子类确定要使用的容器。例如,矩形将有一个std::array<Point, 4>容器,而三角形将有一个std::array<Point, 3>容器。
所以我的问题是,最优雅的 C++ 方法是什么?
在点存储在支持随机访问迭代的容器中的特定情况下,解决“问题” *的简单方法(例如std::array或std::vector使用普通指针作为迭代器:
struct Point {};
struct Shape
{
typedef Point* iterator;
typedef const Point* const_iterator;
virtual iterator begin() = 0;
virtual const_iterator begin() const = 0;
virtual iterator end() = 0;
virtual const_iterator end() const = 0;
virtual ~Shape() {}
};
Run Code Online (Sandbox Code Playgroud)
并让派生类实现begin(),end()使用指向它们保存的数组的第一个和最后一个元素的指针。
或者,您可以将类型擦除与boost.any_range或通过any_iterator类型一起使用。这可能超出了这个答案的范围,但这里有一篇关于这个问题的好文章。
* 那是假设确实存在需要隐藏迭代器类型的问题。请注意,您还可以编写模板代码来处理不同的迭代器类型。
| 归档时间: |
|
| 查看次数: |
1255 次 |
| 最近记录: |