2010-11-23 77 views
3

我有成员函数类:的std ::一个成员函数绑定到对象指针

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 S IN另一个类中的一个的参考,并用它来做好自己的工作(不必为这些功能中的每一个做类)。我尝试使用类构造函数和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::bad_function_call被抛出std::exception。什么可能是错的?谢谢!如果您需要更多信息,请询问!

回答

2

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

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

我想你在找什么是Target,你声明 bool insertSourceFile(const std::string &);等,然后你做 std::bind(&Target::insertSourceFile, p_target, _1)但是这是一个猜测,直到意图澄清。

+0

谢谢,我用更正的语法更新了这个问题。我确实希望使用m_insert作为一个函数,它使用`const std :: string&`并返回一个`bool`,并且该函数是`p_target`(因此是绑定)中的一个。 – rubenvb 2010-11-23 15:58:26

相关问题