std::vector nach std::vector

08/09/2016 - 23:59 von Jens Müller | Report spam
Wenn ich einen std::vector<std::shared_ptr<T>> A habe und einen
std::vector<std::shared_ptr<const T>> B brauche, geht das anscheinend
nur über Umkopieren, denn die Typen haben nichts miteinander zu tun.

Kennt jemand eine elegantere und effizientere Methode, die trotzdem
àhnlich const-correct ist?

Und gibt es vielleicht schon Vorschlàge, wie man die Sprache für solche
Szenarien optimieren könnte? In der Regel werden A und B im Speicher ja
identisch sein - es wàre doch toll, wenn man B mit konstantem Aufwand
aus A move-konstruieren könnte ...
 

Lesen sie die antworten

#1 Stefan Reuther
09/09/2016 - 18:00 | Warnen spam
Hallo,

Am 08.09.2016 um 23:59 schrieb Jens Müller:
Wenn ich einen std::vector<std::shared_ptr<T>> A habe und einen
std::vector<std::shared_ptr<const T>> B brauche, geht das anscheinend
nur über Umkopieren, denn die Typen haben nichts miteinander zu tun.

Kennt jemand eine elegantere und effizientere Methode, die trotzdem
àhnlich const-correct ist?



Wenn da nicht der 'shared_ptr' wàre, könntest du den Inhalt beider
Vektoren ('vector<T*>', 'vector<const T*>') typkorrekt über
const T*const* ptr = &vec[0];
size_t len = vec.size();
darstellen (Sonderfall 'vec.empty()' beachten!). Dieses Pointer/Lànge
Pàrchen kann man sich nun in einer Klasse kapseln, der man ein hübsches
Interface verpasst.

Ich meine, eine solche Klasse ist unter dem Namen 'array_view' im
Gespràch für die Standardisierung.

Bekommt jemand den 'shared_ptr' aufgelöst? :-)


Stefan

Ähnliche fragen