C++ 将向量元素的引用传递给线程函数
我正在尝试这样做:C++ 将向量元素的引用传递给线程函数,c++,multithreading,c++11,vector,reference,C++,Multithreading,C++11,Vector,Reference,我正在尝试这样做: #include <thread> #include <vector> void foo(bool &check){ } int main(){ std::vector<bool> vec(1); std::thread T(foo, std::ref(vec[0])); } 但是,它适用于正常变量: bool var; std::thread(foo, std::ref(var)); 我不知道为什么我不能
#include <thread>
#include <vector>
void foo(bool &check){
}
int main(){
std::vector<bool> vec(1);
std::thread T(foo, std::ref(vec[0]));
}
但是,它适用于正常变量:
bool var;
std::thread(foo, std::ref(var));
我不知道为什么我不能传递对vec元素的引用。有人能解释一下原因吗?有什么解决办法吗?问题是,您使用的是<代码>运算符[]forvector
返回的不是bool,而是std::vector::reference
,即代理类。
您可以使用以下内容:
bool value = vec[0];
std::thread T(foo, std::ref(value));
T.join();
vec[0] = value;
另一个解决方法(未测试)
#包括
#包括
void foo(向量和向量){
//在这里访问v[0]并指定您想要的任何值
//理想情况下,您也可以通过索引
//如果要访问第n个元素
}
int main(){
std::vec(1);
标准::线程T(foo,标准::ref(vec));
}
是否无法将引用直接传递给向量元素?根据您提出的解决方案,我将不得不重写项目的一半。@user3125731不要使用vector
。运算符[]按副本返回引用,因此不能将其绑定到左值引用。你可以使用移动语义,而不是引用。我不知道为什么这个答案会被否决。聪明的解决方法。通常最简单的方法是,最好的方法是明确地询问如何将向量组件传递给线程,而不是出于某种原因将整个向量传递给线程。
bool value = vec[0];
std::thread T(foo, std::ref(value));
T.join();
vec[0] = value;
#include <thread>
#include <vector>
void foo(vector& v){
//here access v[0] and assign whatever value you'd like
//ideally you could pass an index as well
// if you want to access the Nth element
}
int main(){
std::vector<bool> vec(1);
std::thread T(foo, std::ref(vec));
}