如何解决涉及模板的循环依赖关系?

时间:2020-10-03 02:16:54

标签: c++ templates circular-dependency

在一个我正在处理自定义容器类的项目中,有一个嵌套的模板化迭代器,出于循环依赖的原因,我不得不提取该嵌套的模板化迭代器。不幸的是,这给我留下了另一个涉及模板类的循环依赖。如果没有对类进行模板化,那么这将不是问题,因为我可以将实现放入.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;
};

是否有任何方法可以解决此问题而无需编写单独的迭代器类?

0 个答案:

没有答案