gpt4 book ai didi

c++ - 处理在 C++ 结构中更改的值

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:17:55 25 4
gpt4 key购买 nike

我有一个描述系统应该如何初始化的结构。然后我有一个方法返回对所述结构的引用,以便最终系统的用户可以在初始化后更改某些选项。我希望检测值何时更改并告诉系统的组成部分检查它们所依赖的选项以查看它们是否已更改并相应地更新自己。

我相信通过重载运算符或类似的东西可以实现这样的事情。我真的不介意开销以及检测和更新代码是什么样的,我只是希望更改选项的语法看起来干净,并且用户不必调用 updateOptions() 更改或任何内容后的功能。

首先,这可能吗?其次,如果是,我将如何处理?

最佳答案

我假设您的结构名为 Fun

方案一:添加getter、setter和notify

我会为所述结构的每个属性编写一个 getter 和一个 setter。它看起来像这样:

struct Fun {
Fun(System& sys): system{sys} {}

void setGun(int g) {
gun = g;
notify();
}

int getGun() {
return gun;
}

void notify() {
system.updated();
}

private:
System& system;
int gun;
};

当然,引用可以是指针,当然,您必须将结构分离为头文件和 cpp 文件。

解决方案 2:为结构体 Fun 编写一个 get 和 set

这个解决方案的优点是它可能是最快的,当然也是最干净的。

struct System {
void setFun(Fun f) {
if (f != fun) {
// update only if different
updated();
}
// it may be faster if Fun allocates resources
fun = move(f);
}

// do not return by reference
Fun getFun() const {
return fun;
}

private:
Fun fun;
};

关于c++ - 处理在 C++ 结构中更改的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30787157/

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