是否可以在C ++中创建自定义事件? 例如,假设我有变量X和变量Y.每当X改变时,我想执行一个将Y设置为3X的函数。 有没有办法创建这样的触发/事件? (触发器在某些数据库中很常见)

===============>>#1 票数:10

这基本上是观察者模式的一个实例(正如其他人提到和链接的那样)。 但是,您可以使用模板魔术来使其更具语法可调性。 考虑类似......

template <typename T>
class Observable
{
  T underlying;

public:
  Observable<T>& operator=(const T &rhs) {
   underlying = rhs;
   fireObservers();

   return *this;
  }
  operator T() { return underlying; }

  void addObserver(ObsType obs) { ... }
  void fireObservers() { /* Pass every event handler a const & to this instance /* }
};

然后你可以写...

Observable<int> x;
x.registerObserver(...);

x = 5;
int y = x;

用于编写观察者回调函数的方法完全取决于您; 我建议http://www.boost.org的功能或功能模块(你也可以使用简单的仿函数)。 我还提醒您注意这种类型的运算符重载。 虽然它可以使某些编码样式更清晰,但鲁莽使用类似的渲染

似乎LikeAnIntToMe = 10;

一个非常昂贵的操作,可能会爆炸,并导致调试噩梦未来几年。

===============>>#2 票数:3

Boost信号是另一个常用的库,你可能会遇到Observer Pattern(又名Publish-Subscribe)。 买家要小心,我听说它的表现太可怕了。

===============>>#3 票数:1

您应该阅读一些关于设计模式的内容 ,特别是观察者模式

来自奇趣科技的 Qt实施了一个很好的解决方案,他们称之为信号和插槽

===============>>#4 票数:1

使用观察者模式

代码项目示例

维基页面

===============>>#5 票数:0

据我所知,你不能用默认变量来做,但是如果你写了一个带回调函数的类,你可以让其他类注册,他们希望得到任何更改的通知。

  ask by Adam translate from so

未解决问题?本站智能推荐:

1回复

C ++集或其他集合的自定义擦除

我想做这样的事情: 该集的擦除操作将删除指针以避免内存泄漏。 对于C ++容器,这是否可行?或者正确的解决方案是对容器进行子类化并编写自己的擦除方法,或者使用某种智能指针方案?
2回复

在自定义分配器中处理没有默认构造函数

我有一个#define到我的new宏,使用我自己的分配器,比如MYNEW(Type, Allocator) ,我将使用malloc分配一些原始内存,然后使用placement new在原始内存上分配类型如 但是,当Type没有默认构造函数时,我遇到了问题。 我试过的一个场景是做一些像M
1回复

名称自定义LinkedList类型

这是最佳做法的问题。 我已经实现了LinkeList( https://github.com/ivanseidel/LinkedList ),并且工作正常。 问题是,我正在编写重复具有以下内容的代码: LinkedList<Beat> ,在我的情况下是Rithm ,但是R
4回复

设计可自定义的字符串过滤器

假设我在my_dir/my_subdir有大量的文件名,以某种方式格式化: 例如data11_7TeV是data_type , 00179691是运行号, NTUP_PHOTON是数据格式。 我想写一个接口来做这样的事情: 我想要懒惰的行为,例如在count或get_lis
1回复

解耦自定义用户数据

我有一个自定义着色器生成器: 我可以生成着色器,并像这样使用它: 它可以快速运行( MCVE ),但是存在不良耦合。 1. My_UniformInt缓存glsl特定变量( glsl_id )。 2. My_UniformInt也与glGetUniformLocation
1回复

处理许多自定义异常的最佳方法是什么?

由于某些要求,在我的cpp库中,我需要添加许多自定义例外(几乎50个以上),因此我正在考虑编写如下的自定义例外, 但是我担心的是,我需要编写这么多的自定义异常类(我有近50种以上的不同种类的异常,因此我可能最终会写出这么多异常类),是否有任何方法可以在一个或几个类中定义全部,并且抛出异常
2回复

如何在子类中使用自定义的虚函数初始化基本成员变量

StructComponent类的构造函数采用不同的逻辑来根据info的传入对象的类型初始化其成员变量。 在这里,我使用强制转换将传递参数转换为正确的子类对象。 Q1>代码正确是否忽略了潜在的设计问题? Q2>假定ClassA的所有子类都具有功能CreateStruc
5回复

如何在C ++中模拟递归类型定义?

昨天我问了以下问题 ,为方便起见,转载于此; “对于我的一个项目,我真正想做的就是这样做(将其简化为最低限度); 我必须承认,我认为不可能直接这样做,我认为MoveTree中的MoveTree矢量将被禁止。 但无论如何我都试过了,它的效果非常好。 我正在使用Microsoft
2回复

ISO C ++:如何设计事件?

我知道在C ++中设计事件的两种方法: 1:使用回调: 2:使用virtual方法: 设计活动还有其他方式或其他想法吗? 和 在ISO C ++中设计事件的最佳模式是什么?
2回复

Singleton类中的C ++链接器错误未定义引用

这个问题已经在这里有了答案: C ++:对Singleton类的实例的未定义​​引用 5答案 我正在尝试将此java单例类移植到c ++: 我移植到此C ++代码: 但是我不能编译这个! 和gcc链接器错误发生。