Erstelle ein optionales Tupel

9

Ich verstehe nicht, warum es kein optional tuple gibt, und ich meine damit etwas Ähnliches; optional<int,string,char> , die ein optional int , optional string und optional char kombinieren würde.

Sie können sich das wie ein optimiertes std::tuple<boost::optional<T>...>

vorstellen

wo die booleans , die von optionals verwendet werden, alle zusammen am Ende von structure sind, um sie zu packen oder besser noch in einem Bitset zu speichern.

Das kann die Erinnerung an die Struktur A LOT reduzieren und ist auch eleganter:

std::tuple<boost::optional<int>,boost::optional<string>,boost::optional<char>>

VS

optional<int,string,char>

Ich kann mir einen Weg vorstellen, dies zu tun, indem ich die Implementierung von boost::optional und variadic templates benutze, aber bevor ich damit anfange, würde ich gerne wissen, ob dies eine gute Idee ist, was eine bessere Art der Implementierung wäre Das sind die Schwierigkeiten, vor denen ich stehen würde?

BEARBEITEN:

Grundsätzlich, warum ich std::tuple<boost::optional<T>...>;

nicht mag

Da ein optional<T> eine Vereinigung von T und a bool ist:

Die neue Struktur kann viel Speicher sparen!

    
Othman Benchekroun 09.06.2015, 13:08
quelle

3 Antworten

1

Sie können sich selbst implementieren, ähnlich wie:

%Vor%

Live-Demo

    
Jarod42 09.06.2015, 18:16
quelle
0

Ist es nicht eine gute Option, einen Vorlagenalias zu verwenden?

%Vor%

Oder in der Tat die andere Variante, wenn Sie es vorziehen;

%Vor%

Jetzt können Sie einfach

schreiben %Vor%

und erhalte die von dir gewählte Bedeutung.

Natürlich, wenn nur eines der Tupel-Mitglieder jemals gefüllt wird, existiert dies bereits: boost::variant<T...>

    
sehe 09.06.2015 13:45
quelle
0

Die gewünschte Struktur kann bereits als Spezialisierung von tuple<T> erstellt werden. Es hat keinen Zweck, eine zusätzliche Struktur einzuführen. Es gibt nichts anderes hier, als ein spezielles vector zu machen, nur um EBO zu verwenden.

Was Sie wollen, wird durch die vorhandenen Schnittstellen perfekt abgedeckt. Wenn Sie eine andere Implementierung wünschen, könnten Sie sich immer spezialisieren, ich denke oder rollen Sie Ihre eigenen.

    
Puppy 11.06.2015 22:00
quelle