【发布时间】:2021-12-02 21:53:36
【问题描述】:
在 C++ 中有没有一种方法,使用原始指针或其他方式在指向对象发生变化时触发某些操作?
场景:
class A
{
double var;
B var2 {&var};
}
class B
{
double* pVar;
B (double* _var ) { pVar = _var};
}
我在 B 类中有函数,只要成员变量 var 更改值,就会调用这些函数。目前我需要将这些函数公开,以便可以从 A 类手动调用它们,这可以通过使用 var 的 setter 来实现。如果我想让 B 类中的函数保持私有(因为它被 B 类内部的其他事件调用),我有什么选择?
【问题讨论】:
-
简而言之:不,没有。
-
你不能用原始指针做到这一点。你应该阅读观察者设计模式。
-
这个问题的标题和第一句话是关于一件事,但问题的其余部分是关于从另一个类调用私有成员函数。无论如何,当变量发生变化时,没有办法神奇地调用函数。如果你想使用 setter 函数做类似的事情,可能让 A 接受从 var 的 setter 调用的回调。通过
friend处理私人/公共问题。 -
您的问题本质上与要求“在
int更改时触发操作”相同。指针是与大多数其他值一样的值。 -
核心 C++ 语言中没有内置这样的工具。 Boost Signals2 提供了这种功能,我认为它是在 Qt 的信号和插槽之后设计的。