题
我正在尝试找到一种访问一组容器的通用方法。除了另一个自定义列表之外,我还有一个标准向量和列表。
自定义列表定义了一个迭代器;
class Iterator: public std::iterator<std::forward_iterator_tag, T> {
// ...
}
Iterator begin() {
return (Iterator(root));
}
Iterator end() {
return (Iterator(NULL));
}
适当的运算符重载。
理想情况下,我想这样做;
class Foo {
public:
Foo() {
std::list<int> x;
std::vector<int> y;
custom_list<int> z;
iter = x.begin(); // OR
iter = y.begin(); // OR
iter = z.begin();
// ...
};
private:
std::iterator<int> iter;
};
但显然这些都是不同类型的迭代器。不过,我可以假设所有容器都是同一类型。
有没有一种优雅的方法来解决这个问题?
解决方案
其他提示
一个对你的要求要小心的例子。您看到的 any_iterator 类适用于无限的迭代器类型集。你只有三个,这是你事先知道的。当然,您将来可能需要添加第四种类型,但是如果这需要 O(1) 额外的代码行怎么办?
可能包含的类型的封闭集的一大优点是 sizeof() 具有上限,这意味着您可以避免堆及其带来的间接性。基本上,将它们全部放入 boost::variant 中并调用 apply_visitor。
不隶属于 StackOverflow