std ::将成员函数绑定到对象指针

时间:2010-11-23 15:29:36

标签: c++11 functional-programming

我有成员函数的课程:

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。可能有什么不对?谢谢!如果您需要更多信息,请询问!

1 个答案:

答案 0 :(得分:2)

在您的代码中,insertSourceFile方法,它返回std::function<etc>。在您的绑定调用中,您正在执行调用该方法的Target::insertSourceFile()。因此,错误。

修改 具体来说,Target :: insertSourceFile不是一个接受字符串并返回布尔值的函数。

我认为你要找的是Target,你宣布 bool insertSourceFile(const std::string &);等,然后你做 std::bind(&Target::insertSourceFile, p_target, _1)但是在明确意图之前,这是猜测。