Ich versuche boost :: any zu verwenden, um die sqlite-Rückgabewerte einzukapseln. Ich habe dann versucht, eine Schleife zu schreiben, um diese zu drucken.
Mein erster Gedanke war etwas wie:
%Vor% Nun für den erfahrenen Programmierer wird es offensichtlich, dass dies nicht funktionieren kann, da Typid eine Instanz anstelle einer numerischen ID zurückgibt.
Nach einigen Recherchen dachte ich, ich könnte versuchen entweder typeid(...).hash_code()
, aber dies ist nicht ausreichend constexpr
qualifiziert (Neben der Gefahr von Hash-Kollision).
if ... else ...
labyrinth zu erstellen, um Objekte basierend auf ihrem typeid zu behandeln? hash_code
nicht const_expr
ist? Ist das ein Ergebnis der getrennten Zusammenstellung von Objektdateien? std::type_index
? Wenn man bedenkt, dass es nur einige zusätzliche Operatoren bietet ( <
, <=
, >
, >=
), warum war es nicht möglich, seine Funktionalität mit std::type_info
? Ich habe das Gefühl, dass Sie nach Boost-Varianten und statischen Besuchen suchen.
Da Varianten nicht erwähnt wurden, könnte es sich lohnen, diese als Antwort zu veröffentlichen. Demonstruction:
Live auf Coliru %Vor%
Druckt
%Vor% Hier ist eine Implementierung von etwas, das dem statischen Besuch auf boost::any
ähnelt und C ++ 11 lambdas verwendet:
( Demo )
Die Idee ist, dass Sie ein boost::any
oder boost::any const
als erstes Argument an any_call
übergeben und danach mehrere lambdas übergeben. Das erste Lambda, dessen Parametertyp mit dem in boost::any
enthaltenen Objekttyp übereinstimmt, wird aufgerufen, und any_call
gibt true zurück. Wenn kein Lambda übereinstimmt, gibt any_call
den Wert false zurück.