Je suis simplement curieux à propos de l'implémentation de boost::variant
.boost :: variante d'implémentation
Est-ce que ça fonctionne comme ça?
Deux membres:
- Un certain nombre représentant le type actuellement stocké (par exemple 0 pour le premier paramètre de modèle, 1 pour le second paramètre de modèle, etc)
- Une union de tous les types possibles (qui, bien sûr la taille du plus grand).
apply_visitor()
:
a une déclaration switch
sur le nombre représentant le type actuellement stocké pour appeler la surcharge correcte (ce qui dans le pire des cas être compilé en tant que table de saut prenez donc le temps constant).
Je comprends qu'il y a aussi un certain nombre d'optimisations qui peuvent boost::variant
n'a pas besoin d'allouer dynamiquement de la mémoire comme détaillé here, mais je pense que je les ai.
Vous pouvez réellement regarder le code source et peut-être même la documentation pourrait indiquer comment il est implémenté. Je m'attendrais à un tampon (tableau char de type suffisant) et une étiquette pour déterminer comment interpréter le tampon. –
Excuses d'avance, mais vous avez regardé la source, non? Vous devriez être capable de comprendre exactement comment cela fonctionne, soit en étudiant les sources, soit en construisant une application de test et en passant par un débogueur, non? – Bukes