我正在看一些使用Boost.Function的代码,我有一个问题,那就是如何编写代码来允许赋值为空。我试图找到相应的Boost代码,但无法找到。基本上,是什么使这成为可能?
boost::function<void()> func;
func = NULL;编辑:下面的代码对我来说是不能编译的,那么他们是如何防止这种情况的呢?
func = 1;发布于 2011-02-17 23:06:43
通过使用指针参数的运算符重载。来自boost源:
#ifndef BOOST_NO_SFINAE
self_type& operator=(clear_type*)
{
this->clear();
return *this;
}
#endif这并不意味着"func“本身是空的,实际上你可以访问它自己的函数。下面的代码会编译,不会崩溃。
TEST_F(CppTest, BoostFunctions) {
boost::function<void()> func;
func = NULL;
ASSERT_TRUE(func==NULL);
ASSERT_FALSE(func.has_trivial_copy_and_destroy());
}发布于 2011-02-17 22:51:23
我不知道你到底想做什么,但这可能会有帮助:
boost::function<void()> *pFunc;
pFunc = NULL;顺便说一句,在C++中,你通常会写0或者nullptr而不是NULL。
发布于 2011-02-17 23:19:10
boost::function可以在其赋值操作符中接受指向函数的指针。指针可以是有效的指针或NULL (表示0)。尝试传递int时出现错误的原因是不能将整数赋值给指针。它类似于尝试执行以下操作:
char* c = 1;它也不会编译。
https://stackoverflow.com/questions/5030437
复制相似问题