是否可以在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. wxWidgets的自定義事件
- 13. 我如何處理c#wpf自定義控件中的事件
- 14. WPF中的自定義附加事件
- 15. JavaScript中的自定義事件
- 16. 自定義控件中的故事板
- 17. Live()與jQuery中的自定義事件
- 18. pygame中的自定義事件
- 19. 骨幹中的自定義事件
- 20. Java中的自定義事件設計
- 21. jQuery中的自定義類事件?
- 22. AS3中的自定義廣播事件?
- 23. Expression Blend中的自定義事件
- 24. Magento中的自定義事件
- 25. jQuery中的全局自定義事件
- 26. 自定義日曆中的事件
- 27. 事件vs自定義事件
- 28. Qt:定義自定義事件類型
- 29. 定義並觸發自定義事件
- 30. 自定義控件上的自定義事件
很好的解釋!我在過去的項目中使用了助推器,並一直對結果感到滿意。 – 2008-09-16 23:57:05