2016-03-11 51 views
4

的遺留函數是否安全?我們有一個遺留系統,它使用boost :: function,現在決定遷移到更新的現代C++標準。假設我們有這樣的遺留函數:將C++ 11 std :: function傳遞給需要boost :: function

void someFunction(boost::function<void(int)>); 

直接傳遞C++ 11函數是否安全?

//calling site, new C++11 code 
std::function<void(int)> func = [](int x){ 
    //some implementation 
} 
someFunction(func); //will this always work? 

boost :: function是否也可以優雅地處理標準C++ 11 lambda?

// will this also work? 
someFunction([](int x)->void{ 
    //some implementation 
}); 

回答

8

是的這將工作。

重要的是,你不應該混淆類型安全兼容性。你是不是通過std::function作爲boost::function。你正在告訴編譯器換行std::function變成了boost::function

這可能沒有效率 - 因爲每個調用都會添加另一個間接層。但它會起作用。

同樣的事情發生在lambdas上:關於lambdas沒有什麼魔力,它只是函數對象的語法糖。

相關問題