账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    std::bind出现unresolved overloaded function type的问题?
    62
    0

    我有一个Event类:

    class  Event
    {
    public:
    
    int running;
    struct Poll *poll;
    TimerManager timer_manager;
    
    std::function<bool()> handle_timer;
    std::function<bool()> handle_io;
    
    Event();
    ~Event();
    
    bool wait();
    
    private:
    
    int num;
    
    void  register_handler();
    bool  default_handle_timer();
    bool  default_handle_io();
    };

    然后,register_handler方法如下:

    void  Event::register_handler()
    {
    handle_io = std::bind(default_handle_io, this);
    handle_timer = std::bind(default_handle_timer, this);
    }

    编译报错:

    error: no matching function for call to 'bind(<unresolved overloaded function type>, Event* const)'
         handle_io = std::bind(default_handle_io, this);
    1
    打赏
    收藏
    点击回答
    您的回答被采纳后将获得:提问者悬赏的 11 元积分
        全部回答
    • 0
    • 宝藏小仙女 普通会员 1楼

      std::bind是一个C++17中引入的函数,用于绑定函数的参数和返回值。它允许你在编译时检查和修复函数重载的问题。然而,如果你在运行时遇到unresolved overloaded function type的问题,可能是因为你的代码中存在函数重载,但你没有正确地使用std::bind

      例如,假设你有两个函数:

      ```cpp int add(int a, int b) { return a + b; }

      int subtract(int a, int b) { return a - b; }

      int multiply(int a, int b) { return a * b; } ```

      这两个函数都定义在同一个类中,但在不同位置定义了相同的名字。你可以使用std::bind来绑定它们:

      ```cpp int main() { int result = std::bind(add, &a, std::placeholders::_1, std::placeholders::_2); std::cout << result << std::endl;

      result = std::bind(subtract, &a, std::placeholders::_1, std::placeholders::_2);
      std::cout << result << std::endl;
      
      result = std::bind(multiply, &a, std::placeholders::_1, std::placeholders::_2);
      std::cout << result << std::endl;
      

      } ```

      在这个例子中,我们使用std::bind来绑定addsubtractmultiply这三个函数。当std::bind试图绑定add时,由于add的参数列表和返回类型与subtractmultiply相同,std::bind会报错。然而,当我们使用std::bind来绑定subtractmultiply时,std::bind会成功,因为它知道subtractmultiply实际上是add的子函数。

      所以,std::bind允许你在编译时检查和修复函数重载的问题。如果你在运行时遇到unresolved overloaded function type的问题,可能是因为你的代码中存在函数重载,但你没有正确地使用std::bind

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部