J'ai une classe avec un std privé :: carte de unique_ptr:utilisant l'opérateur [] pour accéder à un std privé :: carte de unique_ptr
class MyClass{
std::map <KeyType, std::unique_ptr<my_type>> my_map;
...
};
J'ai choisi parce que unique_ptr my_map est le seul propriétaire des objets my_type .
Je voudrais exposer une fonction de membre public opérateur [] pour accéder (renvoi parfait) my_map. Quelque chose comme:
// my_class is of type MyClass
auto ptr = my_type_factory(...); // my_type_factory returns a std::unique_ptr<my_type>
....
my_class[1] = std::move(auto_ptr);
J'ai essayé avec diverses définitions possibles de l'opérateur []:
class MyClass{
....
public:
auto operator[](KeyType && key) { return my_map[std::forward<KeyType>(key)]; }
// or return & my_map[...];
};
mais il ne fonctionne pas, à la fin j'invoque toujours le constructeur de copie supprimé de unique_ptr . Pour avancer, si je déplace my_map vers l'interface publique, j'ai réussi tous mes tests, mais c'est tricher bien sûr, puisque j'essaie d'affiner mes compétences C++ modernes et je pense qu'il y a un principe qui Je n'ai pas encore grokked avec unique_ptr et bouge. Donc, ma question est: comment utiliser std :: unique_ptr's dans une std :: map privée?
@LogicStuff: Ne peut pas être dupe de celui-là, juste par le titre. – einpoklum