【发布时间】:2015-09-06 16:29:36
【问题描述】:
我有一个纯抽象类和两个派生类,用于存储相同类型的数据,比如int,但在不同的数据结构中,比如map 和vector。
class AbstractContainer {
public:
virtual MyIterator firstValue() = 0;
}
class ContainerMap : public AbstractContainer {
private:
map<K, int>;
public:
MyIterator firstValue() { // return iterator over map values (int) }
}
class ContainerVector : public AbstractContainer {
private:
vector<int>;
public:
MyIterator firstValue() { // return iterator over vector values (int) }
}
在ContainerMap 中,我可以继承map<K, int>::iterator 来迭代地图值。
但是我如何定义一个独立于数据结构的通用迭代器MyIterator,使得给定AbstractContainer 类型的指针我可以迭代值而忽略存储数据的实际结构?除此之外,这是一个好习惯吗?
编辑
这个问题是问题的简化。在我的项目中,其中一个子类将我的对象存储在内存中(在std::map 中),而另一个子类从外部数据库中检索对象。我正在尝试创建一个通用接口来访问对象集合,该接口独立于数据源,因为操作(搜索、插入和删除)将完全相同。
【问题讨论】:
-
看看它是如何在 std 中完成的,通用的 typedefs 定义了模板中的迭代器。当然,我假设你这样做是为了好玩。这是可怕的做法。将 std 用于任何实际代码。
-
对不起,我不明白你为什么声称这是一种可怕的做法。我尽可能将 std 用于数据结构......我只是希望我访问对象的方式对于不同的数据结构是相同的
标签: c++ iterator containers