質問
一連のコンテナにアクセスする一般的な方法を見つけようとしています。別のカスタム リストに加えて、標準のベクトルとリストがあります。
カスタム リストはイテレータを定義します。
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 クラスは、無制限のイテレータ型セットで動作します。事前にわかっているのは 3 つだけです。確かに、将来的に 4 番目の型を追加する必要があるかもしれませんが、そのために O(1) 行の余分なコードが必要になったらどうなるでしょうか?
含まれる型の閉じたセットの大きな利点は、sizeof() に上限があることです。これは、ヒープとそれがもたらす間接化を回避できることを意味します。基本的に、それらをすべて boost::variant に詰め込んで apply_visitor を呼び出します。
所属していません StackOverflow