是否可以在 C++ 中创建自定义事件?例如,假设我有变量 X 和变量 Y。每当 X 发生变化时,我想执行一个将 Y 设置为 3X 的函数。有没有办法创建这样的触发器/事件?(触发器在某些数据库中很常见)
Adam
问问题
6946 次
5 回答
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;
一个非常昂贵的操作,很可能会爆炸,并导致未来几年的调试噩梦。
于 2008-09-16T22:52:42.140 回答
3
Boost 信号是您在执行观察者模式(又名发布-订阅)时可能遇到的另一个常用库。买家在这里要小心,我听说它的性能很糟糕。
于 2008-09-17T01:13:41.037 回答
1
奇趣科技的Qt实现了一个很好的解决方案,他们称之为Signals and Slots。
于 2008-09-16T22:36:51.397 回答
1
据我所知,您不能使用默认变量来执行此操作,但是如果您编写了一个采用回调函数的类,您可以让其他类注册它们希望收到任何更改的通知。
于 2008-09-16T22:38:26.043 回答