3
我想收集lambda表達式,並要求不能複製lambas,只能移動。
這是因爲lambas可能需要移動捕捉一些不可複製構造的參數。std ::可移動lambda表達式的矢量,可能嗎?
例子:
NonCopyableType varName ;
auto func = [a=move(varName)](){ ... } ; //varName is move-captured
這個我想存儲func
在vector
後,但因爲它需要lambda表達式是可複製我不能使用std::function
型。
vector<function<void()>> list ;
list.push_back(func) ; //won't work
是否有可能以其他方式做到這一點?
另請參閱[P0288](http://wg21.link/p0288)和[cxx_function庫](https://github.com/potswa/cxx_function)。 – Potatoswatter
這讓我想知道爲什麼'std :: function'首先要求可複製性。 STL容器不需要它,並且與庫的其餘部分相配合。 – GetFree
@GetFree類型擦除的原理要求類型提供「函數」所具有的所有功能。 'set'的默認構造函數不需要訪問'T'的拷貝構造函數。但是當你將'T'轉換爲'function '時,'T'的所有相關功能都需要立即捕獲,因爲'function'無法記住'T'。 –
Potatoswatter