gpt4 book ai didi

c++ - 2个类可以共享一个结构吗?

转载 作者:行者123 更新时间:2023-11-28 06:35:20 26 4
gpt4 key购买 nike

假设我有 2 个类 FooCookBook 是一个结构。

以前 Book 是一个全局变量,我想将它更改为由 Foo 拥有,这样我就可以拥有许多 Foo他们自己的

Cook 读取 Book,但是 Foo 会不时更新 Book 的值。

我测试的以下代码不起作用。我是 C++ 的新手,我不明白为什么这不起作用。

class Foo {
private:
Book book;
Cook cook;
public:
Foo();
virtual ~Foo();
};

class Cook {
private:
Book * book;
public:
Cook();
virtual ~Cook();
void setBook(Book * book);
};

然后在 Foo 的构造函数中有一个:cook.setBook(&book);

最佳答案

虽然我不太同意 tadman,但您所做的应该可以正常工作您应该使用 std::shared_ptr

如果您发现您的值不同步,则可能是您覆盖了 Foo.book 但该更改尚未传播到 Foo.cook.book .

可能更好的设计是:

class Foo {
private:
Book book;
Cook cook;
Book& getBook();
public:
Foo() : cook(std::bind(getBook,this));
virtual ~Foo();
};

class Cook {
private:
std::function<Book&()> _memfunptr;
public:
Cook(std::function<Book()> memfunptr): _memfunptr(memfunptr);
virtual ~Cook();
};

从这里任何时候你想在 Foo.cook 中引用 Foo.book 你可以只使用 Cook._memfunptr 来访问

请注意,你们中的一些问题可能与类实现有关?您应该在每个 class 范围的末尾都有一个分号,并且您是 Cook 构造函数应该定义为 Cook(); < em>不是 Cook cook;.

关于c++ - 2个类可以共享一个结构吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26873190/

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