gpt4 book ai didi

c++ - 将 boost::function 转换为 std::function

转载 作者:IT老高 更新时间:2023-10-28 22:19:30 28 4
gpt4 key购买 nike

我正在更新我们的一些旧代码以使用 C++11 功能代替 boost 等价物。然而,并非一切都是简单的命名空间替换,如无序容器和智能指针。

例如 boost::function 有方法 empty()clear()std::function 没有。

std::function 定义了一个 operator() 我一直在使用它来替换 empty() 引用,但是什么我应该使用替换 clear() 引用吗?

我考虑过使用 std::function 赋值运算符并分配 nullptr 来清除它,但我担心清除它可能会产生无意的副作用底层函数,但使对象不可用。

显然,更好的解决方案是默认初始化任何可重用的成员函数对象,这样总是有一个有效的回调,可以简单地用用户提供的回调来更新,但我的目标是直接替换以前的用法现在不是代码审查。

最佳答案

There is an operator() defined for std::function that I've been using to replace empty()

你的意思是 operator! 吗?

对于 empty 使用该运算符在 bool 上下文中对其进行测试:

if (f.empty())

变成:

if (!f)

或者

if (!f.empty())

变成:

if (f)

(这也适用于 boost::function,它也有 operator!operator bool。)

对于 clearnullptr 分配给它,这不会使其无法使用,它只是将其设置为默认构造状态:

f.clear();

变成

f = nullptr;

或者(感谢 Paul Groke 的建议):

f = {};

相当于:

f = decltype(f){};

但更高效,更容易输入和阅读!

关于c++ - 将 boost::function 转换为 std::function,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11161825/

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