Ich speichere "Instanzen verschiedener Typen" mit "gemeinsamen Besitz". Das ist, was ich im Moment tun:Nicht-kopieren std :: shared_ptr <boost::any>?
class Destructible {
public:
virtual ~Destructible() = default;
};
// UGLY
class MyType1 : public Destructible { ... };
class MyTypeN : public Destructible { ... };
class Storage {
std::vector<std::shared_ptr<Destructible>> objects_;
...
}
Ich würde gerne boost::any
wechseln, all diese Abweichungen zu entfernen und gewann die Fähigkeit Instanzen zu speichern, wirklich jede Art. Auch ich mag boost::any
Schnittstelle und boost::any_cast
.
Aber meine Typen erfüllen nicht ValueType
Anforderungen, sie sind nicht kopierbar. Was ist die beste (vorzugsweise vorhandene) Lösung für dieses Problem? Etwas wie shared_any_ptr
, das Destruktor bei der Erstellung erfasst, hat Typ löschen, Referenzzähler und kann any_cast
tun.
Edit: boost::any
ermöglicht die Erstellung mit Umzug, aber ich würde lieber nicht einmal bewegen und Zeiger verwenden. Edit2: Ich benutze auch make_shared
ausgiebig, so etwas make_shared_any_ptr
würde sich als nützlich erweisen.
Schreiben Sie Ihre eigenen 'any'? Es ist die einfachste aller Arten von Radierungen, also ist es eine gute Übung. – Barry
@Barry Ich frage mich nur, ob es in Boost oder irgendwo eine existierende Lösung für das Problem gibt. – Anton3
Sie könnten 'boost :: variant' verwenden, es ist auch viel typsicherer. –