pool.addTask(std::bind(&MyTask::process, ptask.get())); 和pool.addTask(std::bind(&MyTask::process, ptask));区别
时间: 2024-04-18 16:27:31 浏览: 12
这两个代码片段的区别在于传递给`::bind`的参数类型不同。
在第一个代码片段中,`std::bind`函数接受了一个指向`MyTask::process`成员函数的绑定器,并且使用了`ptask.get()`来获取任务指针的原始指针。`std::bind`会复制并存储这个原始指针,然后在调用时会通过复制的指针来执行成员函数。
而在第二个代码片段中,`std::bind`函数直接接受了一个指向`MyTask::process`成员函数的绑定器,并且使用了`ptask`来传递任务对象。这里的`ptask`会被复制并存储,然后在调用时通过复制的对象来执行成员函数。
因此,两者的区别在于第一个代码片段使用了原始指针,而第二个代码片段使用了对象的拷贝。具体使用哪种方式取决于任务对象的所有权和生命周期的管理方式。
相关问题
m_hmiservice_proxy->getSettingAPAInfoInfAttribute().getChangedEvent().subscribe( std::bind(&ApaService::onSettingAPAInfoInfChanged, this, std::placeholders::_1));
这是一个订阅事件的代码片段。它使用了一个名为m_hmiservice_proxy的对象,通过调用getSettingAPAInfoInfAttribute()方法来获取一个属性对象。然后,它调用该属性对象的getChangedEvent()方法来获取一个事件对象。通过调用subscribe()方法,并传递一个回调函数std::bind(&ApaService::onSettingAPAInfoInfChanged, this, std::placeholders::_1),来订阅该事件。这个回调函数是ApaService类的onSettingAPAInfoInfChanged方法,并且使用std::placeholders::_1来指定事件参数的位置。
std::bind(&RecvWarStart::fightFunc, &war) 如何转成lambda表达式
std::bind是C++11标准库中的一个函数,它可以将一个函数与一些参数绑定在一起,形成一个新的可调用对象.这样就可以在不需要手动提供参数的情况下调用这个函数,比如在std::thread或std::function中使用.
例如:
std::bind(func, arg1, arg2)
这将返回一个新的可调用对象,它绑定了func, arg1, arg2三个参数,可以直接调用。