我正在查看一些使用Boost.Function的代码,并对如何编写代码以允许赋值为NULL提出疑问。我试图追踪相应的Boost代码,但无法进行。基本上,是什么让这成为可能?
boost::function<void()> func;
func = NULL;
编辑:以下不能为我编译,所以他们如何防止这种情况呢?
func = 1;
答案 0 :(得分:3)
使用指针参数进行运算符重载。来自激励来源:
#ifndef BOOST_NO_SFINAE
self_type& operator=(clear_type*)
{
this->clear();
return *this;
}
#endif
这并不意味着“func”本身是NULL,实际上你可以访问它自己的函数。以下代码编译并且不会崩溃。
TEST_F(CppTest, BoostFunctions) {
boost::function<void()> func;
func = NULL;
ASSERT_TRUE(func==NULL);
ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}
答案 1 :(得分:1)
我不知道你到底想要做什么,但这可能会有所帮助:
boost::function<void()> *pFunc;
pFunc = NULL;
顺便说一句,在C ++中,你大多写0或nullptr而不是NULL。
答案 2 :(得分:1)
boost::function
可以在其赋值运算符中接受指向函数的指针。指针可以是有效指针或NULL
(表示0)。尝试传递int
时出错的原因是您无法为指针分配整数。这就像尝试执行以下操作:
char* c = 1;
哪个也不会编译。
答案 3 :(得分:0)
正如您所见{4}} std :: function有nullptr_t
的赋值运算符