如果我有一个只允许只移动语义的对象 - 是否可以从一个集合中移动项目?我似乎找不到办法来做到这一点。
答案 0 :(得分:9)
不,这是不可能的。无法对set
中的元素进行非const访问,并且移动需要非const引用。允许非const访问会使打破set
的不变量变得非常容易。
答案 1 :(得分:5)
C ++ 17添加了一个函数std::set<>::extract
,该函数允许将对象移出集合:
std::set<MoveOnlyType> s;
s.emplace(arg0, arg1, arg2); // only way to insert such move-only objects, since C++11
auto internal_node = s.extract(s.begin()); // internal_node no longer part of set, we can do with it what we want
MoveOnlyType m = std::move(internal_node.value()); // finally get the actual object out