gpt4 book ai didi

C++:如何创建两个相互使用的类

转载 作者:行者123 更新时间:2023-12-04 08:07:26 24 4
gpt4 key购买 nike

This question 仅在类相互使用作为成员类型时给出答案,而在相互使用函数时不给出答案。如何在下面的例子中做到这一点? Bar 是一个单例容器,它处理在所有 Bar 上完成的操作。

// Foo.h

#include "Bar.h"

class Foo {
public:
Foo() { Bar::get_instance()->push_back(this); }

void do_something() {}
};
// Bar.h

#include "Foo.h"
#include <vector>

class Bar {
public:
Bar(const Bar &other) = delete;

void operator=(const Bar &) = delete;

static Bar *get_instance()
{
static Bar bar;
return &bar;
}

void push_back(Foo *foo) { foos_.push_back(foo); }

void do_something_all() { for (Foo *f : foos_) f->do_something(); }

private:
Bar() = default;

std::vector<Foo *> foos_;
};

最佳答案

远期报关会做的伎俩,在 .h 中转发 decalre 并在 cpp 中包含标题。

// Bar.h

//#include "Foo.h"
#include <vector>

class Foo; // <---- this one

class Bar {
public:
Bar(const Bar &other) = delete;

void operator=(const Bar &) = delete;

static Bar *get_instance();

// move definition in cpp
void push_back(Foo *foo);

// move definition in cpp
void do_something_all();

private:
Bar() = default;

std::vector<Foo *> foos_;
};
//栏.cpp
#include "Foo.h"

Bar* Bar::get_instance()
{
static Bar bar;
return &bar;
}

void Bar::push_back(Foo *foo)
{
foos_.push_back(foo);
}

void Bar::do_something_all()
{
for (Foo *f : foos_) f->do_something();
}

关于C++:如何创建两个相互使用的类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66155890/

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