在多线程库中转换future
Converting future in multithreaded library
我正在使用一个简单的多线程库来尝试理解基础知识。
lib有一个队列函数,如下所示:
auto enqueue(F&& f, Args&&... args)
-> std::future<typename std::result_of<F(Args...)>::type>;
并存储如下函数:
std::queue< std::function<void()> > tasks;
有一个关于如何传递lambda的例子,但我想传递成员变量。所以我创建了一个小对象:
Threadpool tp(4);
class myClass{
vector<std::future<int>> res;
public:
int compute(int i){
return 2 * i;
};
void update(){
for(int i = 0; i < 10; i++){
res.emplace_back(
// C2664 - 'std::future<int>::future(const std::future<int> &)':
// cannot convert argument 1 from 'std::future<_Rx>' to 'std::future<int> &&'
tp.enqueue(std::bind(&myClass::compute, this), i)
);
};
}
};
创建一个无参数的函数可以工作。但即使是网站上的lambda示例也可以使用传入的参数:
tp.enqueue([](int answer) { return answer; }, 42);
我在这里没有得到什么?
还有一个附带问题:当涉及到标准函数时,使用:
的优势是什么?auto fn(...) -> return type
代替:
return type fn(...)
占位符缺失:
tp.enqueue(std::bind(&myClass::compute, this, std::placeholders::_1), i);
或
tp.enqueue(std::bind(&myClass::compute, this, i));
或与
tp.enqueue([=]() { this->compute(i); });
相关文章:
- 防止主数据类型C++的隐式转换
- 模板参数替换失败,并且未完成隐式转换
- 努力将整数转换为链表。不知道我在这里做错了什么
- HEX值到wchar_t字符(UTF-8)的转换
- lambda参数转换为constexpr技巧,然后获取带链接的数组
- 将 Qvector<uint8_t> 转换为 QString
- 如何在cuSparse中使用cusparseXcoo2csr从coo转换为csc
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- 在c++中使用nlohmann从类到json的转换
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 将Integer转换为4字节的unsined字符矢量(按大端字节顺序)
- 处理小于cpu数据总线的数据类型.(c++转换为机器代码)
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- 复制列表初始化的隐式转换的等级是多少
- 正在将指针转换为范围
- 如何防止 c++ 在从浮点型转换为双精度型(不适用于 IO)时添加额外的小数?
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 是否可以从int转换为enum类类型
- 了解 GLM- openGL 中的相机转换
- 在多线程库中转换future