C++中的自定义事件?

Ada*_*dam 8 c++ design-patterns

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

Ada*_*ght 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 /* }
};
Run Code Online (Sandbox Code Playgroud)

然后你可以写...

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

x = 5;
int y = x;
Run Code Online (Sandbox Code Playgroud)

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

似乎LikeAnIntToMe = 10;

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


epa*_*tel 1

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

Trolltech的 Qt实现了一个很好的解决方案,他们称之为信号和槽