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>...>
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>...>;
Da ein optional<T>
eine Vereinigung von T
und a bool
ist:
Die neue Struktur kann viel Speicher sparen!
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...>
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.
Tags und Links c++ boost variadic-templates tuples optional