2013-10-13 36 views
0
class MyClass { 
    std::vector<int> vi; 
    std::vector<string> vs; 
} 

我想用一个迭代器来遍历所有集合在MyClass,即通过所有的六迭代,然后通过所有与vsvi唐没有1:1的关系(所以我不能使用基于元组的迭代方法)。这是我遇到的一个编程问题。遍历不同类型的集合类中的

Iterator设计模式对相同类型的集合起作用,从内部表示中抽象访问。它的接口是模拟这个问题的一个有用的东西,但是集合之间的类型差异是什么让我很难。

我喜欢从使用的角度来看待问题。

MyClass mc; 
... // push elements into mc 
for(MyClassIterator it = mc.begin(); 
         it != mc.end(); 
         it++) 
{ 
    // *it can be either an int or a string 
    // operator * for the iterator cannot return a common type! :(
} 

我甚至不知道如何来思考设计MyClassIterator因为在集合中的不同类型(int,字符串中的例子)。

编辑:只是为了澄清,这是我遇到的编程问题。我无法想出任何明智/优雅的东西,因此我在这里问这个问题。

+0

这是我遇到的一个问题,我找不出一个通用的解决方案。只是想与专家核对。 – Raja

+0

在担心迭代器之前,请关注循环中的代码。实际上,对于可能是“int”或可能是“字符串”的东西,它会做什么?该问题的答案将有助于确定迭代器应返回的类型。 –

+0

由于C++不支持检查,我认为唯一的解决方法是查询迭代器的类型。 类似于: if(it.typeInt()) int&i = * it; ... 它的丑陋地狱 - 这就是为什么我想知道是否有一个优雅的答案。 – Raja

回答

1

你可以让你的迭代器的值类型变成Boost Variant

+0

有趣的 - 所以你说我为这个类创建一个boost :: variant迭代器访问器? – Raja

+0

是的,这是比定义元组类型并填充其中一个字段更通用的解决方案。 –