僅移動類型的 Vector 初始化
G 嘗試在向量初始化中複製 unique_ptr 對象,由於複製構造函數而失敗無法訪問。該錯誤訊息正確突出了嘗試複製不可複製物件的問題。
利用移動迭代器
要解決此問題,您可以利用移動迭代器,它會移動取消引用時的元素:
using move_only = std::unique_ptr<int>; move_only init[] = { move_only(), move_only(), move_only() }; std::vector<move_only> v{std::make_move_iterator(std::begin(init)), std::make_move_iterator(std::end(init))};
僱用助手類型
或者,您可以利用輔助類型在初始化中實現移動語義:
template<class T> struct rref_wrapper { explicit rref_wrapper(T&& v) : _val(std::move(v)) {} explicit operator T() const { return T{std::move(_val)}; } T&& _val; }; // Only usable on temporaries template<class T> typename std::enable_if< !std::is_lvalue_reference<T>::value, rref_wrapper<T> >::type rref(T&& v) { return rref_wrapper<T>(std::move(v)); } std::initializer_list<rref_wrapper<move_only>> il{rref(move_only()), rref(move_only()), rref(move_only())}; std::vector<move_only> v(il.begin(), il.end());
以上是如何在 C 中用僅移動型別初始化向量?的詳細內容。更多資訊請關注PHP中文網其他相關文章!