1
我正在使用simple 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)
);
};
}
};
創建無參數函數的工作原理。但是,即使在網站上的例子拉姆達可與傳遞的參數:
tp.enqueue([](int answer) { return answer; }, 42);
什麼我沒有得到嗎?
另外一個側面的問題:當涉及到標準的功能是什麼用的優勢:
auto fn(...) -> return type
代替:
return type fn(...)
缺少'bind'的佔位符:標準::綁定(&MyClass的::計算,此,/ *的std ::佔位符:: */_ 1)' – Jarod42
後返回'類型允許在'decltype'中使用參數,並允許使用範圍類型(所以'auto C :: foo() - > iterator',而不是'typename C :: iterator') – Jarod42
謝謝你的答案,缺失的佔位符是問題。 – val