我試圖瞭解回調的所有用法,但是我偶然發現了這裏的代碼,我很難理解這個模板類的好處。主要我創建類FooBar的對象,然後創建類CallBack的對象,所以我可以調用FooBar中的方法。我認爲沒有任何額外的工作,因爲它已經創建的對象(FooBar ob1),爲什麼不直接調用該函數?Callback類模板的實際用途是什麼?
2
A
回答
1
回調可以幫助我們去耦什麼會從完成時它得到執行。如,
std::vector<CallBack<FooBar>> commands;
// initialize the commands
// in charge of sepecifying WHAT will be invoked
FooBar foobar;
commands.emplace_back(foobar, &FooBar::foo);
commands.emplace_back(foobar, &FooBar::bar);
// ... ...
// no need to know the details about functions
// in charge of controlling WHEN will be invoked
for (auto command : commands) {
command();
}
或減少代碼repetiton,
void do_sth(CallBack<FooBar> c) {
// do something before...
c();
// do something after...
}
FooBar foobar;
if()
do_sth(CallBack<FooBar>(foobar, &FooBar::foo));
else
do_sth(CallBack<FooBar>(foobar, &FooBar::bar));
回撥在Command pattern通常使用。
相關問題
- 1. toContain()的實際用途是什麼?
- 2. 什麼是System.Transactions的實際用途?
- 3. Socket.ExclusiveAddressUse的實際用途是什麼?
- 4. Android NDK的實際用途是什麼?
- 5. array_diff_uassoc的實際用途是什麼?
- 6. jQuery的實際用途是什麼?
- 7. 該嵌套類的實際用途是什麼?
- 8. 模板類在C++中的用途是什麼
- 9. 派生類作爲模板參數的用途是什麼?
- 10. JUnit測試用例中「失敗」的實際用途是什麼?
- 11. 什麼是PHP的睡眠()的實際用途?
- 12. ES5提供的新方法的實際用途是什麼?
- 13. jQuery源代碼中「self.each(callback,array)」的用途是什麼?
- 14. Observable.never()函數的實際用途是什麼?
- 15. <sparkle:ReleaseNotesLink>的實際用途是什麼?
- 16. 雙向覆蓋「bdo」的實際用途是什麼?
- 17. Lua在Mac OS X中的一些實際用途是什麼?
- 18. .PDB文件的實際用途是什麼?
- 19. `git fetch`命令的實際用途/目標是什麼
- 20. 什麼是stream_wrapper_register在php中的實際用途?
- 21. 受保護構造函數的實際用途是什麼?
- 22. '-x'參數的實際用途是什麼?
- 23. <dfn>標籤的實際用途是什麼?
- 24. resx文件的實際用途是什麼?
- 25. android中.so文件的實際用途是什麼?
- 26. 受保護繼承的實際用途是什麼?
- 27. getchar和putchar的實際用途是什麼?
- 28. 成員隱藏,什麼是它的實際用途
- 29. 「複製」構造函數的實際用途是什麼?
- 30. 可掛載式發動機的實際用途是什麼?
該回調允許更改對象和/或要調用的方法。事實上,通過一個簡單的例子來說明它是如何工作的,這個例子可能會被改寫爲不使用CallBack。 – Jarod42