2008-09-16 43 views
8

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

回答

0

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

10

这基本上是Observer模式的一个实例(正如其他人提到并链接的那样)。但是,您可以使用模板魔法来使它更具语法调整。考虑像...

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的功能或功能模块(你也可以使用简单的函子)。我也提醒你注意这种操作符重载。虽然它可以使某些编码风格更清晰,鲁莽使用渲染类似于

flyLikeAnIntToMe = 10;

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

+0

很好的解释!我在过去的项目中使用了助推器,并一直对结果感到满意。 – 2008-09-16 23:57:05

3

Boost signals是另一个您可能会遇到的观察者模式(aka Publish-Subscribe)常用库。买家要小心这里,我听说它的表现太糟糕了。