c++ std::bind和boost::bind区别
时间: 2023-07-23 19:45:38 浏览: 314
`std::bind` 和 `boost::bind` 都是用于函数对象的绑定的工具,它们的主要区别如下:
1. 头文件不同
`std::bind` 定义在 `<functional>` 头文件中,而 `boost::bind` 定义在 `<boost/bind.hpp>` 头文件中。
2. 返回值不同
`std::bind` 返回一个函数对象,而 `boost::bind` 返回一个函数指针,它可以被直接调用。
3. 参数传递方式不同
`std::bind` 和 `boost::bind` 都支持值传递和引用传递,但是 `boost::bind` 还支持指针传递。
4. 可变参数支持不同
`std::bind` 支持可变参数,但是 `boost::bind` 不支持可变参数。
5. 支持成员函数调用方式不同
`std::bind` 支持使用 `std::mem_fn` 函数封装成员函数指针,而 `boost::bind` 不支持。
综上所述,`std::bind` 是 C++11 标准库提供的函数对象绑定工具,功能更加强大,而 `boost::bind` 则是 Boost 库中提供的函数对象绑定工具,它也有一些特定的用途。如果使用 C++11 标准库,则应该优先选择 `std::bind`。
相关问题
Qt485版本支不支持std::bind和std::function
Qt 4.8.5 是一个比较老的版本,它的编译器可能不支持 C++11 的新特性,包括 std::bind 和 std::function。这两个特性是 C++11 引入的,用于函数对象的封装和绑定。如果你想在 Qt 4.8.5 中使用这些特性,你可以考虑使用 Boost 库的相应功能,Boost 库提供了类似的功能,并且对更旧的编译器也有良好的兼容性。另外,如果你能升级到更高版本的 Qt,那么 std::bind 和 std::function 会在支持 C++11 的版本中得到完全支持。
m_thread = std::thread(std::bind(&CTimer::Run,this));
这段代码使用了C++的线程库std::thread来创建一个新的线程,并通过std::bind将CTimer类中的Run函数与当前对象绑定在一起。这样,当线程启动时,就会调用CTimer对象的Run函数。这种方式可以实现并发执行,提高程序的效率。
另外,还有一种使用boost库的方式来创建线程。boost库提供了boost::thread类,可以通过boost::bind将函数或成员函数与参数绑定在一起。比如可以使用boost::asio库的io_service::run函数来创建新的线程,并将其与io_service对象绑定在一起。这样,在新线程中,io_service会不断地运行,处理各种异步操作。
对于异步操作的回调函数,也可以使用boost::bind来绑定参数。比如可以使用boost::asio库的async_wait函数,<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [「 C++ 11」std::thread “invalid use of non-static member function“问题处理](https://blog.csdn.net/zcc1229936385/article/details/126441007)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* *3* [boost::asio::deadline_timer(理解)](https://blog.csdn.net/aSnakePy/article/details/102678906)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文