仅移动类型的 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中文网其他相关文章!