0

我想创建一个支持迭代器的自定义容器。它看起来像这样:

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不完整。

  1. 是否有可能解决这个问题,同时让两个类完全只包含标题并且所有方法都隐式内联(它们大多只包含几行)?
  2. 如果没有,是否可以通过将一些方法分解到 cpp 文件中来解决它?
4

1 回答 1

1

可以部分满足您的第一个要求,因为您可以在标头中定义所有内容,除了需要在定义之外声明和定义的begin以及在定义之后(完成类型)。这假设您保留当前的定义顺序(之前),我建议您保留。endinlineSomeContainerSomeIteratorSomeContainerSomeIterator

否则,您当然可以放弃inline(隐式或其他方式)并在类定义之外进行定义。通过这样做,这两种类型都将从这些定义中完成。

于 2012-08-14T19:09:57.443 回答