2016-02-18 32 views
2

我試圖瞭解回調的所有用法,但是我偶然發現了這裏的代碼,我很難理解這個模板類的好處。主要我創建類FooBar的對象,然後創建類CallBack的對象,所以我可以調用FooBar中的方法。我認爲沒有任何額外的工作,因爲它已經創建的對象(FooBar ob1),爲什麼不直接調用該函數?Callback類模板的實際用途是什麼?

+0

該回調允許更改對象和/或要調用的方法。事實上,通過一個簡單的例子來說明它是如何工作的,這個例子可能會被改寫爲不使用CallBack。 – Jarod42

回答

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通常使用。

+0

嗯,這個例子是很高的水平。你有更簡單的嗎? –

+0

@DraganItmSmoljan我試着添加一個。 – songyuanyao

+0

非常感謝你,我會分解它並嘗試着解決它。 –

相關問題