イテレータをサポートするカスタムコンテナを作成したいと思います。次のようになります。
class SomeContainer {
...
public:
typedef SomeIterator iterator;
iterator begin() { ... }
iterator end() { ... }
};
次に、このためのイテレータを作成します。
class SomeIterator: public boost::iterator_facade<
SomeIterator,
SomeType,
boost::bidirectional_traversal_tag> {
...
}
これに伴う問題は次のとおりです。SomeContainer
beforeSomeiIterator
とforwarddeclareを宣言するとSomeIterator
、コンパイラはstbegin()
とend()
メソッドSomeIterator
が不完全な型であると文句を言います。しかし、私がそれを逆にすると、問題は逆になります:SomeContainer
不完全です。
- 両方のクラスを完全にヘッダーのみにし、すべてのメソッドを暗黙的にインライン(ほとんどの場合、数行しか含まない)にして、この問題を解決することは可能ですか?
- そうでない場合、いくつかのメソッドをcppファイルに分解することでそれを解決することは可能ですか?