是否可以在C++中创建自定义事件?例如,假设我有变量X和变量Y.每当X改变时,我想执行一个函数来设置Y等于3X。有没有办法创建这样的触发器/事件? (触发器在一些数据库中很常见)C++中的自定义事件?
8
A
回答
1
认为您应该阅读一些关于Design Patterns,特别是Observer Pattern。
Qt从Trolltech已经实施了一个很好的解决方案,他们称之为Signals and Slots。
1
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 很昂贵的操作,可能会爆炸,并导致未来几年的调试噩梦。
3
Boost signals是另一个您可能会遇到的观察者模式(aka Publish-Subscribe)常用库。买家要小心这里,我听说它的表现太糟糕了。
相关问题
- 1. C#中的自定义控件事件#
- 2. C#自定义事件
- 3. C中的类VB自定义事件#
- 4. C#自定义控件的自定义事件WinForm
- 5. 带自定义参数的C#事件
- 6. C#Designed不能识别自定义用户控件中的自定义事件
- 7. C#自定义事件处理
- 8. C#自定义事件处理程序
- 9. 何时使用自定义c#事件
- 10. C++ - 自定义生成事件
- 11. C#自定义事件始终为空
- 12. 在Xamarin页自定义事件C#
- 13. 自定义事件处理在COM C++
- 14. C#获取自定义控件中的控件事件
- 15. GWT中的自定义插件事件
- 16. jQuery的定义自定义事件
- 17. 的Javascript自定义事件
- 18. wxWidgets的自定义事件
- 19. 我如何处理c#wpf自定义控件中的事件
- 20. Qt中默认控件的C++自定义事件
- 21. 事件自定义事件,从组件
- 22. C++中的自定义事件/中断处理
- 23. Live()与jQuery中的自定义事件
- 24. 收听flex中的自定义事件
- 25. JavaScript中的自定义事件
- 26. CLASS中的自定义事件
- 27. ASP.NET中的自定义事件
- 28. NewRelic ASP.NET中的自定义事件
- 29. Magento中的自定义事件
- 30. WPF中的自定义NumericUpDown ValueChanged事件
很好的解释!我在过去的项目中使用了助推器,并一直对结果感到满意。 – 2008-09-16 23:57:05