gpt4 book ai didi

c++ - 提升 iterator_facade 和前向声明

转载 作者:行者123 更新时间:2023-11-28 07:59:09 25 4
gpt4 key购买 nike

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

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 , 然后编译器提示 st begin()end() SomeIterator 的方法是一个不完整的类型。但是,如果我用另一种方式来做,那么问题就反过来了:SomeContainer不完整。

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

最佳答案

可以部分满足您的第一个要求,因为您可以在 header 中定义所有内容,除了需要声明 beginend inline 并在 SomeContainer 定义之外定义,并且在 SomeIterator 定义(完成类型)之后定义。这假定您保持当前的定义顺序(SomeContainerSomeIterator 之前),我建议您保持这一顺序。

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

关于c++ - 提升 iterator_facade 和前向声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11959041/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com