这是来自更大代码的玩具示例。要点是,我试图根据一些输入参数制作一个提升功能。但是,以下编译失败,并显示错误消息no match for call to boost::function<void()> candidate expects 0 arguments, 1 provided.
HPP:
class SillyClass
{
public:
SillyClass();
void sillyFunc1();
void sillyFunc2();
void setUp(bool );
private:
boost::function<void ()> m_function;
};
CPP
SillyClass::SillyClass() : m_function()
{
}
void SillyClass::setUp(bool p_in)
{
if (p_in)
{
m_function ( boost::bind(&SillyClass::sillyFunc1, this) );
}
else
{
m_function ( boost::bind(&SillyClass::sillyFunc2, this) );
}
}
void SillyClass::sillyFunc1()
{
std::cout << "Silly" << std::endl;
}
void SillyClass::sillyFunc2()
{
std::cout << "Not Silly" << std::endl;
}
我知道这需要this
甚至有机会工作。如果我将分配函数的行更改为:
boost::function<void ()> f(boost::bind(&SillyClass::sillyFunc2, this));
m_function = f;
这个编译得很好。这是我第一次尝试将boost功能用于此类事情,所以我确信我必须忽视某些事情。但是,文档似乎没有提到为什么无法编译。有人能向我指出我所缺少的东西吗?
答案 0 :(得分:1)
您在构造函数的member-initializer-list和正常赋值中混淆了初始化语法。这样:
m_function ( boost::bind(&SillyClass::sillyFunc1, this) );
使用单个参数调用 m_function
。但是m_function
的{{1}}不接受任何参数,因此错误(调用与operator()
不匹配,候选人需要 0参数< /强>)。你想要分配它:
boost::function<void()>
应该可以正常工作。