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::function
empty()
你的意思是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)
但更高效,更容易打字和更容易阅读!