Flexible convertir entre string, int, double pour le C++ Variante de la Classe

Je me suis mise en œuvre d'une variante de la classe (pas d'utilisation de boost) et je me demandais comment vous pouvez gérer le cas où vous auriez magasin tout de chaîne de caractères, entier, ou double et de les convertir automatiquement en fonction de type désiré par ToString(), ToInt(), ou ToDouble().

Par exemple,

Variant a = 7;
cout << "The answer is" + a.ToString() << endl; //should print "The answer is 7"
a = "7.4";
double &b = a.ToDouble();
b += 1;
cout << a.ToString() << endl; //should print 8.4

ToXXX les fonctions de retour à la référence de la catégorie que vous souhaitez convertir. Maintenant, j'ai le code où il peut renvoyer le même type qu'il a été initialement attribué à( Variant a = Int(7); a.ToInt() œuvres) et raise exception lorsque le assignée type est différent de celui que vous souhaitez convertir.

Désolé d'utilisation de boost n'est pas une option.

Un peu difficile à dire sans avoir aucune idée de comment vous la mettre en œuvre.
J'ai personnalisé les types de String, Int, Double que toutes dérive à partir d'un objet de base de classe. a.ToDouble() serait effectivement de retour Double mais je n'ai remplacer opérateur de cast pour Double qui serait effectivement de retour de référence pour la double.
Bien sûr vous pouvez. Pensez Boost.Tout. - Je soupçonne que la réponse pourrait être que vous aurez besoin de mettre en œuvre la conversion de chacun de ces types dans chaque de la Chaîne, Int et Double classes.
pour une raison que j'ai pris le string/int/double locaux à l'objet. Je ne sais pas pourquoi, je suppose que. Semble stupide, avec le recul.
la variante est conçu comme un typesafe version d'un syndicat, afin de travailler avec différents types de manière uniforme, il n'est pas prévu pour de réinterprétation.

OriginalL'auteur JosephH | 2011-11-17