std::ref
时间: 2023-06-21 21:10:00 浏览: 146
`std::ref` 是 C++ 标准库中的一个函数模板,用于将一个对象转化为一个可被引用的对象。它接受一个对象的引用作为参数,并返回一个包装了该引用的可被引用对象。这个可被引用对象可以像引用一样使用,并且可以传递给需要引用的函数或算法。
通常情况下,当需要将一个对象作为引用参数传递给函数时,可以直接使用该对象的引用。但是有些情况下,需要将该对象包装成一个可被引用的对象,例如当需要将该对象作为一个算法的参数传递时,或者需要将该对象存储在容器中时。这时就可以使用 `std::ref` 来将该对象包装成一个可被引用的对象。
使用 `std::ref` 的示例如下:
```c++
#include <functional>
#include <iostream>
void func(int& n) {
std::cout << "n = " << n << std::endl;
}
int main() {
int n = 42;
std::ref(n); // 包装 n 的引用,但不会改变 n 的值
func(n); // 直接传递 n 的引用
func(std::ref(n)); // 将 n 包装成可被引用的对象,传递给 func
return 0;
}
```
相关问题
void MainWindow::action_agv() { std::vector<std::thread> threads; threads.push_back(std::thread(&AGVScheduler::assign_task_to_agv, std::ref(tasks), std::ref(agvs))); // 分配小车 for (int i = 0; i < agvs.size(); i++) { threads.push_back(std::thread(& MainWindow::moveAgvs, i)); // 更新 AGV } for (auto& t : threads) { t.join(); ,報錯:no matching function for call to “std:: thread :: _ lnvoker<std::tuple<std::tuple<void
这个错误通常是由于参数类型不匹配导致的。在这段代码中,错误可能是由于 `MainWindow::moveAgvs` 函数的参数类型与 `std::thread` 构造函数所需的参数类型不匹配。
请检查 `MainWindow::moveAgvs` 函数的定义和声明,确保其参数类型与所需的参数类型一致。如果参数类型正确,请检查代码中是否存在其他语法错误或类型不匹配的情况。
std::thread th(method,std::ref("/dev/ttyUSB0"),460800,std::ref(handler),time);报error: static assertion failed
这个错误通常是由于method的参数类型与"/dev/ttyUSB0"和handler不匹配引起的。请确保method的参数类型与"/dev/ttyUSB0"和handler的类型匹配。如果参数类型不匹配,可以使用std::bind将参数绑定到方法中,例如:
```
std::thread th(std::bind(method, "/dev/ttyUSB0", 460800, handler, time));
```
请注意,当使用std::bind时,方法的第一个参数会自动成为绑定的参数,因此不需要使用std::ref。
阅读全文