我有成员函数的课程:
typedef std::function<bool (const std::string &)> InsertFunction;
bool insertSourceFile( const std::string & );
bool insertSourceDir( const std::string & );
bool insertHeaderFile( const std::string & );
bool insertHeaderDir( const std::string & );
我希望在另一个类中引用其中一个InsertFunction
,并使用它来完成它的工作(不必为每个函数创建类)。我尝试使用类构造函数和std::bind
将成员函数的隐式第一个参数绑定到相关对象的指针:
new ListParser( p_target->sourceDirs(), bind(&Target::insertSourceFile, p_target, _1), this );
与
ListParser::ListParser( const stringSet &dirs, const InsertFunction &insert,
State* parent = 0 )
: ParserState( parent ),
m_dirs( dirs ),
m_insert( insert )
{ }
UPDATE :感谢@lijie,源代码现在可以编译,但是当调用函数m_insert时,std::exception
会抛出std::bad_function_call
。可能有什么不对?谢谢!如果您需要更多信息,请询问!
答案 0 :(得分:2)
在您的代码中,insertSourceFile
是方法,它返回std::function<etc>
。在您的绑定调用中,您正在执行调用该方法的Target::insertSourceFile()
。因此,错误。
修改强> 具体来说,Target :: insertSourceFile不是一个接受字符串并返回布尔值的函数。
我认为你要找的是Target
,你宣布
bool insertSourceFile(const std::string &);
等,然后你做
std::bind(&Target::insertSourceFile, p_target, _1)
但是在明确意图之前,这是猜测。