2016-03-11 42 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没有什么魔力,它只是函数对象的语法糖。

相关问题