【发布时间】:2012-09-03 17:05:33
【问题描述】:
我对 C++ 有点陌生, 我有一个抽象类(纯虚拟),它继承了 2 个类。 每个派生类都拥有相似的数据,只是在不同的 STL 容器中(数组 vs 映射) 我正在重载基类的运算符,以便执行例如添加 STL 元素。 我希望能够迭代 STL 的元素,不管它是什么类型。
我已经在通用迭代器和类似的东西上搜索了几天,但找不到任何东西。
我没有太多要分享的代码,因为我无能为力。 我想也许可以让我的基类保存一个代表 STL 容器的模板变量,然后在操作符中获取它的迭代器,但同样,不知道该怎么做。
protected:
template<class T>
T gStlContainer;
然后访问
gStlContainer::iterator<double> it;
显然没有用。
有什么建议吗? 谢谢!
编辑: 我正在编辑以尝试使用示例更好地解释。 我在基础(抽象)类中重载了 + 运算符,我想要它做的是遍历 STL 容器的每个元素,并将其添加到另一个元素,例如, 假设我有这个数组作为 STL
arr = [0,1,2,3] // Say it's stored in Derived2 class
arr = [4,5,6,7] // Say it's stored in Derived3 class
这些数组都存储在派生类之一中。 当我在做的时候
Derived1 = Derived2 + Derived3;
那么 Derived1 会持有
arr = [4,6,8,10]
希望现在更清楚一点。问题是它并不总是一个数组,例如它可以结合数组和映射。这就是我需要通用迭代器或一些解决方案的原因。
谢谢!
【问题讨论】:
-
基类的接口是什么(显示您希望它看起来像的有限版本)。我会考虑在基类中定义接口,然后实现一个模板化的派生类型,它将容器的类型作为模板参数......还要注意你必须使用什么版本的标准(C++03/ C++11) 以及是否可以使用
boost::function或std::function之类的库。如果您不需要提供算法的单个实现并且每个派生类型都进行迭代,那么它可能会简单得多。