gpt4 book ai didi

c++11 - std::将成员函数绑定(bind)到对象指针

转载 作者:行者123 更新时间:2023-12-02 22:30:43 25 4
gpt4 key购买 nike

我有一个带有成员函数的类:

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 将成员函数的隐式第一个参数绑定(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 抛出 std::exception: :bad_function_call。可能出什么问题了?谢谢!如果您需要更多信息,请询问!

最佳答案

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

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

我想您要找的内容在 Target 中,你声明 bool insertSourceFile(const std::string &);等等,然后你就做 std::bind(&Target::insertSourceFile, p_target, _1)但这只是猜测,直到意图明确为止。

关于c++11 - std::将成员函数绑定(bind)到对象指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4257683/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com