提升iterator_facade和转发声明
Boost iterator_facade and forward declarations
我想创建一个支持迭代器的自定义容器。它看起来像这样:
class SomeContainer {
...
public:
typedef SomeIterator iterator;
iterator begin() { ... }
iterator end() { ... }
};
然后我为此创建一个迭代器:
class SomeIterator: public boost::iterator_facade<
SomeIterator,
SomeType,
boost::bidirectional_traversal_tag> {
...
}
问题如下。如果我在SomeiIterator
之前声明SomeContainer
并向前声明SomeIterator
,那么编译器会抱怨SomeIterator
begin()
和end()
方法不完整的类型。但是,如果我以另一种方式执行此操作,那么问题就是相反的:SomeContainer
不完整。
- 是否可以在两个
- 类完全仅标头且所有方法都隐式内联(它们大多只包含几行)的情况下解决此问题?
- 如果没有,是否可以通过将某些方法分解到 cpp 文件中来解决它?
可以
部分满足你的第一个要求,因为你可以在标头中定义除begin
和end
之外的所有内容,这些和需要在SomeContainer
定义之外inline
和定义,并在SomeIterator
定义(完成类型)之后定义。这假设你保持当前的定义顺序(SomeContainer
在SomeIterator
之前),我建议你保留。
否则,您当然可以放弃inline
(隐式或其他方式)并在类定义之外进行定义。通过这样做,这两种类型都将从这些定义中完成。
相关文章:
- 如何在 C++ 中转发声明 std::set?
- C++使用默认模板参数键入别名和转发声明
- 如何转发声明枚举?
- 使用函数指针转发声明作为 lamba 声明
- 如何将枚举类转发声明为模板化类的内部类?
- 转发声明在命名空间中不起作用的替代方法
- 如何正确转发声明结构"using XXX"?
- 在类内和类外的定义处执行类转发声明是否有区别
- 为什么转发声明的好友类不能在类中引用?
- 如何访问转发声明类的成员
- 仅在标头开发中转发声明
- 无法转发声明C typedef结构-正在查找其他建议
- boost::hana 转发声明标头的用例是什么?
- 循环包含依赖项/转发声明
- c++ 使用复杂的依赖项获取正确的转发声明
- 如何转发声明依赖于变量定义的类,而变体定义又依赖于模板化类?
- 有没有办法转发声明命名空间或只是提前使其可见
- 有没有办法在不引用其模板类型的情况下转发声明指向类的指针
- 我如何转发声明boost ::精神统治
- 标题文件中大规模转发声明类别的风险是什么?