J'ai un std::set<std::unique_ptr<T>>
et je voudrais passer à un std::vector<std::unique_ptr<T>>
déplacer seul type extraction de std :: set
#include <set>
#include <vector>
#include <memory>
class C {};
int main()
{
std::set<std::unique_ptr<const C>> s;
std::vector<std::unique_ptr<const C>> v;
std::move(s.begin(), s.end(), std::back_inserter(v));
}
Cela donne l'erreur suivante sur VS2017:
erreur C2280 : 'std :: unique_ptr> :: unique_ptr (const std :: unique_ptr < _Ty, std :: default_delete < _Ty >> &)': la tentative de faire référence à une fonction supprimée
Ne pouvons-nous pas déplacer les itérateurs vers des variables non-const à partir d'un std::set
? Quelle pourrait être une solution viable à ce problème?
Y at-il de toute façon que je puisse implémenter cette méthode pour ma base source jusqu'à ce que le compilateur que j'utilise l'implémente? – tunc
@tunc sorte de, mais c'est moche - voir ci-dessus. Si possible, je recommande d'utiliser Boost (boost :: container :: set, v 1.62.0 et plus). – ecatmur