У меня есть класс с функциями-членами:
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 )
{ }
ОБНОВЛЕНИЕ : благодаря @lijie, источник теперь компилируется, но когда вызывается функция m_insert, std::exception
выбрасывается для std::bad_function_call
. Что может быть не так? Спасибо! Если вам нужна дополнительная информация, пожалуйста, спросите!