gpt4 book ai didi

c++ - 将 C++11 std::function 传递给采用 boost::function 的遗留函数是否安全

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:22:29 44 4
gpt4 key购买 nike

我们有一个大量使用 boost::function 的遗留系统,现在它决定转向更新的现代 C++ 标准。假设我们有这样一个遗留函数:

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
});

最佳答案

是的,这会起作用。

重要的是你不应该混淆类型安全兼容性。您没有传递std::function 作为 boost::function。你告诉编译器包装std::function boost::function

这可能效率不高——因为每个都会在调用时添加另一层间接。但它会起作用。

对于 lambda 也是如此:lambda 没有什么神奇之处,它只是函数对象的语法糖。

关于c++ - 将 C++11 std::function 传递给采用 boost::function 的遗留函数是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35931658/

44 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com