我正在查看一些使用Boost.Function的代码,并且有一个关于如何编写代码以允许赋值为NULL的问题.我试图追踪相应的Boost代码,但无法进行.基本上,是什么让这成为可能?
boost::function<void()> func;
func = NULL;
Run Code Online (Sandbox Code Playgroud)
编辑:以下不能为我编译,所以他们如何防止这种情况?
func = 1;
Run Code Online (Sandbox Code Playgroud)
通过带有指针参数的运算符重载。来自升压源:
#ifndef BOOST_NO_SFINAE
self_type& operator=(clear_type*)
{
this->clear();
return *this;
}
#endif
Run Code Online (Sandbox Code Playgroud)
这并不意味着“func”本身是NULL,实际上您可以访问它自己的函数。以下代码可以编译并且不会崩溃。
TEST_F(CppTest, BoostFunctions) {
boost::function<void()> func;
func = NULL;
ASSERT_TRUE(func==NULL);
ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
579 次 |
最近记录: |