在一个我正在处理自定义容器类的项目中,有一个嵌套的模板化迭代器,出于循环依赖的原因,我不得不提取该嵌套的模板化迭代器。不幸的是,这给我留下了另一个涉及模板类的循环依赖。如果没有对类进行模板化,那么这将不是问题,因为我可以将实现放入.cpp文件中,并在其中包含Container.h,但是我不知道如何将类分解为const版本,以及非常量版本。
在此简化版本中,问题发生在Iterator :: operator *实现中。
Container.h
#pragma once
#include <initializer_list>
#include <vector>
#include "Iterator.h"
class Container
{
public:
Container(std::initializer_list<int> const &content) : content{content} {}
template <bool isConst>
friend class Iterator;
Iterator<false> begin() { return Iterator<false> }
private:
std::vector<int> content;
};
Iterator.h
#pragma once
#include <cstddef>
#include "Container.h"
class Container;
template <bool isConst>
class Iterator
{
Iterator(Container &container) : container{container}, index{0} {};
int &operator*() { return container.content[index]; }
Container &container;
size_t index;
};
是否有任何方法可以解决此问题而无需编写单独的迭代器类?