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

C+中的自定义事件+;? 是否可以在C++中创建自定义事件?例如,假设我有变量X和变量Y。每当X改变时,我想执行一个函数,将Y设置为3X。有没有办法创建这样的触发器/事件?(触发器在某些数据库中很常见),c++,design-patterns,C++,Design Patterns,认为您应该阅读一些关于触发器的内容,特别是 来自的Qt已经实现了一个他们称之为的很好的解决方案。使用观察者模式 据我所知,您不能使用默认变量,但是如果您编写了一个使用回调函数的类,您可以让其他类注册它们希望收到任何更改的通知。这基本上是Observer模式的一个实例(如其他人所提到和链接的)。但是,您可以使用模板魔术来使其在语法上更具palettable性。考虑一下…… template <typename T> class Observable { T underlying;

认为您应该阅读一些关于触发器的内容,特别是


来自的Qt已经实现了一个他们称之为的很好的解决方案。

使用观察者模式


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

这基本上是Observer模式的一个实例(如其他人所提到和链接的)。但是,您可以使用模板魔术来使其在语法上更具palettable性。考虑一下……

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 /* }
};
模板
类可观测
{
T底层;
公众:
可观测和运算符=(常数T和rhs){
基础=rhs;
消防观察员();
归还*这个;
}
运算符T(){返回基础;}
void addObserver(ObsType obs){…}
void fireobservators(){/*将每个事件处理程序传递一个常量&到该实例/*}
};
然后你可以写

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

x = 5;
int y = x;
可观测x;
x、 注册观察者(…);
x=5;
int y=x;
您使用什么方法编写观察器回调函数完全取决于您自己;我建议使用的函数或函数模块(也可以使用简单的函子)。我还提醒您要小心这种类型的运算符重载。虽然它可以使某些编码样式更清晰,但鲁莽地使用渲染,例如

seemsLikeAnIntToMe=10


这是一个非常昂贵的操作,很可能会爆发,并导致多年来的调试噩梦。

是另一个常用的库,您可能会遇到它来执行观察者模式(又称发布-订阅)。买家注意,我听说它的性能很差。

解释得很好!我在过去的项目中使用过boost,并一直对结果感到满意。