回调函数bind是否需要std::placeholder::_1
不是必须只有“调用时才传参数的”才需要占位符 std::placeholders一、核心规则1. 如果回调函数不需要参数 → 不需要占位符2. 如果回调函数需要参数但绑定时已经直接给死了 → 不需要占位符3. 如果参数是【调用时才传进来的】 → 必须用占位符 _1, _2, _3...二、3 种情况带例子一看就懂情况1函数不需要参数不用占位符voidfun(){//无参数}// 绑定autocbstd::bind(fun);// 不需要 placeholder情况2函数需要参数但绑定时直接给值不用占位符voidfun(inta){}// 绑定时直接给 a10autocbstd::bind(fun,10);情况3函数参数调用时才传进来比如按钮点击、ROS回调必须用占位符 _1voidfun(conststd::stringmsg){}// 参数是调用时才传进来的 → 必须用 _1autocbstd::bind(fun,std::placeholders::_1);三、最常见场景 Qt / ROS 代码Qt 按钮点击不带参数voidonClick(){...}// 不用占位符connect(btn,QPushButton::clicked,std::bind(onClick));ROS 订阅消息带参数参数是消息到达时才传进来的 → 必须用 _1voidcallback(conststd_msgs::msg::String::SharedPtr msg){...}subnode-create_subscriptionstd_msgs::msg::String(topic,10,std::bind(YourClass::callback,this,std::placeholders::_1));四、总结情况是否需要 placeholder无参数函数不需要绑定时直接传值不需要调用时才传参回调必须用 _1只有“调用时才会传进来的参数”才需要用 std::placeholders::_1 占位置
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2561264.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!