c++ - C++ 中的自定义事件?

标签 c++ design-patterns

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

最佳答案

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

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的功能或功能模块(您也可以使用简单的仿函数)。我还提醒您要小心这种类型的运算符重载。虽然它可以使某些编码风格更清晰,但不计后果地使用类似 render 的东西

似乎是 LikeAnIntToMe = 10;

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

关于c++ - C++ 中的自定义事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77996/

相关文章:

c++ - 所有重载方法的别名?

c++ - 原型(prototype)模式

design-patterns - Flyweight设计模式之所以命名,是什么原因?

java - 在工厂类中使用帮助器/实用方法

c++ - 如何将参数传递给工厂元素构造函数?

c++ - 如何安全地销毁 QThread?

c++ - 添加新行后未获取数据表行

java - 设计选择: multiple choices dialog?

c# - 首先使用 EF4 代码制作存储库类的最佳做法是什么?

c++ - C++ 中的 "Vector erase iterator out of range"