【发布时间】:2011-01-19 04:51:11
【问题描述】:
我想设计一个类Foo,它存储不同类型的各种数据并返回对它们的迭代器。它应该是通用的,所以Foo 的用户不知道数据是如何存储的(Foo 可能正在使用std::set 或std::vector 或其他)。
我很想写一个这样的界面:
class Foo {
class FooImpl;
FooImpl* impl_;
public:
const Iterator<std::string>& GetStrings() const;
const Iterator<int>& GetInts() const;
};
Iterator 是这样的(就像 .NET 中的迭代器):
template<class T>
class Iterator {
public:
const T& Value() const = 0;
bool Done() const = 0;
void Next() = 0;
};
但我知道这种迭代器在 C++ 中不是标准的,最好像 STL 那样使用迭代器,这样你就可以对它们使用 STL 算法。
我该怎么做? (我需要iterator_traits吗?)
【问题讨论】:
-
这不是和stackoverflow.com/questions/2191724/…同一个问题吗?
-
我也很好奇你为什么需要这种行为。它只是为了更漂亮的语法,还是需要传递它们?
-
您可能会使用一种“any_iterator”,例如参见stackoverflow.com/questions/9938/generic-iterator/9972#9972 或stackoverflow.com/questions/2245233/… 等。
标签: c++ stl iterator pimpl-idiom