AJG*_*G85 16 c++ boost stl c++11 std-function
我正在更新一些旧代码,以使用C++ 11功能代替boost等价物.然而,并非所有东西都是简单的命名空间替换,如无序容器和智能指针.
例如boost::function有方法empty(),clear()但std::function没有.
有一个已operator()定义的std::function,我一直在使用替换empty()引用,但我应该用什么来替换clear()引用?
我已经考虑过使用std::function赋值运算符并指定nullptr清除它,但我担心可能会产生无意识的副作用,不仅清除底层函数,还会使对象无法使用.
显然,更好的解决方案是任何可重用的成员函数对象的默认初始化,这种方式总是有一个有效的回调,可以简单地用用户提供的回调更新,但我只是想直接替换以前的用法而不是代码审查.
Jon*_*ely 23
有一个我已经用来替换的
operator()定义std::functionempty()
你的意思是operator!?
对于empty使用该运营商在布尔环境测试:
if (f.empty())
Run Code Online (Sandbox Code Playgroud)
变为:
if (!f)
Run Code Online (Sandbox Code Playgroud)
要么
if (!f.empty())
Run Code Online (Sandbox Code Playgroud)
变为:
if (f)
Run Code Online (Sandbox Code Playgroud)
(这也与工作boost::function,其中也有operator!和operator bool.)
为了clear分配nullptr它,它不会使它不可用,它只是将它设置为默认构造状态:
f.clear();
Run Code Online (Sandbox Code Playgroud)
变
f = nullptr;
Run Code Online (Sandbox Code Playgroud)
或者(感谢Paul Groke提出的建议):
f = {};
Run Code Online (Sandbox Code Playgroud)
这相当于:
f = decltype(f){};
Run Code Online (Sandbox Code Playgroud)
但更高效,更容易打字和更容易阅读!
| 归档时间: |
|
| 查看次数: |
4986 次 |
| 最近记录: |