2016-08-02 46 views
1

在操作完成(也失敗)的情況下是否添加了一個回調參數?例如:操作完成回調編程練習

template <typename F> 
void load(::std::string const& path, F&& f) 
{ 
    // after a long load 
    ::std::invoke(f, path); 
} 

這裏,f可能在另一個線程的上下文中調用。我的問題來自於思考在程序中是否值得擁有單觸發信號/時隙對。也就是說,一個插槽,只會被調用一次。否則,我們可能需要連接,然後斷開一個可能被認爲是乏味的信號。基本原理是,對於一個返回值,比如一個bool值,我們需要等待結果,而對於回調,我們不需要。

+0

語法對我來說似乎很奇怪。 F應該是什麼?爲什麼不'std :: function '? –

+0

任何可調用的對象,作爲':: std :: invoke'顯示 – user1095108

+0

我認爲使用觀察者模式會更好的可維護性。 – adrianN

回答

2

這不是一般的習慣。這是一個非常基礎的異步編程,可以在Boost.Asio中看到。

Boost.Asio對其所有回調函數都使用幾乎相同的語法,只是它是C++ 03,因此它不能使用invoke。一個例子是async_read,其中調用者告訴Asio從套接字讀取,然後在完成時調用回調函數,並且要求(通過模板強制執行)回調函數採用error_code作爲將適當填充的參數。