我想创建一个支持迭代器的自定义容器。它看起来像这样:
class SomeContainer {
...
public:
typedef SomeIterator iterator;
iterator begin() { ... }
iterator end() { ... }
};
然后我为此创建了一个迭代器:
class SomeIterator: public boost::iterator_facade<
SomeIterator,
SomeType,
boost::bidirectional_traversal_tag> {
...
}
问题如下。如果我SomeContainer
在之前声明SomeiIterator
并转发声明SomeIterator
,那么编译器会抱怨 stbegin()
和end()
方法SomeIterator
是不完整的类型。但是,如果我以另一种方式来做,那么问题就反过来了:SomeContainer
不完整。
- 是否有可能解决这个问题,同时让两个类完全只包含标题并且所有方法都隐式内联(它们大多只包含几行)?
- 如果没有,是否可以通过将一些方法分解到 cpp 文件中来解决它?