Convertir une chaîne en un nom de variable ou un type de variable
Est-il possible de convertir des chaînes de caractères dans des variables(et vice versa) en faisant quelque chose comme:
makeVariable("int", "count");
ou
string fruit;
cin >> fruit; //user inputs "apple"
makeVariable(fruit, "a green round object");
et ensuite être en mesure de simplement y accéder en faisant quelque chose comme:
cout << apple; //a green round object
Merci d'avance!
source d'informationauteur Rhexis
Vous devez vous connecter pour publier un commentaire.
Non, ce n'est pas possible. Ce genre de fonctionnalité est commun dans les langages de script comme Ruby et Python, mais le C++ fonctionne très différemment de ceux-ci. En C++, nous essayons de le faire dans une grande partie du programme de travail que nous pouvons à moment de la compilation. Parfois, nous pouvons faire les choses à runtimeet même alors bon programmeurs C++ sera de trouver un moyen de faire le travail dès le moment de la compilation.
Si vous savez que vous allez créer une variable puis le créer tout de suite:
Ce que vous pourriez ne pas savoir à l'avance est la valeur de la variable, de sorte que vous pouvez reporter à l'exécution:
Si vous savez que vous allez avoir besoin d'une collection de variables, mais pas précisément combien d'entre eux ensuite de créer un carte ou un vecteur:
Rappelez-vous que le nom d'une variable n'est rien, mais un nom — un moyen pour vous de faire référence à la variable plus tard. En C++ il est pas possible ni utile de reporter l'attribution du nom de la variable lors de l'exécution. Tout ce que voulez faire est de rendre votre code plus compliqué et votre programme plus lent.
Vous pouvez utiliser une carte.
Vous voudrez peut-être regarder à C++ carte.
Début des programmeurs de poser cette question au sujet de chaque langue. Il y a un groupe de langues pour lesquelles la réponse à cette question est "oui". Ce sont dynamique, interactive languescomme BASE, Lisp, Ruby, Python. Mais pensez-y: les noms de Variables n'existent que dans le code, pour faciliter la tâche du programmeur. Il n'a de sens que pour définir une nouvelle variable, tandis que le programme s'exécute que si il y a une personne pour ensuite tapez le nom de la variable dans le nouveau code. C'est vrai pour le langage interactif de l'environnement, et pas vrai pour les langages compilés comme le C++ ou le Java. En C++, le temps que le programme s'exécute, et de l'imaginaire nouvelle variable serait créé, il n'y a personne autour pour le type de code utilisation que la nouvelle variable.
Ce que vous voulez vraiment, au contraire, est la possibilité d'associer un nom à un objet lors de l'exécution, de sorte que le code -- pas de personnes-peut utiliser ce nom pour trouver l'objet. Comme d'autres personnes l'ont déjà souligné, les
map
fonction de C++de la bibliothèque standard vous donne cette possibilité.Pas. C++ est statiquement typé, et cela va à l'encontre de ce paradigme.
J'ai vu ce type de fonctionnalité implémentée avant par le stockage des variables dans une stl carte.
Au moins pour l' (vice versa) il y a une possibilité avec le préprocesseur déclaration stringify
#
. Voir cette réponse sur la façon de convertir un C++ nom de variable dans une chaîne de caractères.eh bien, je suppose que u ne peut pas faire de la dynamique des variables, mais u peut utiliser une fonction pour écrire une nouvelle variable et sa valeur dans un fichier texte externe et accéder à sa valeur à partir de ce fichier à l'endroit où cela est nécessaire (u pouvez également supprimer la variable dynamique par retrait à partir du fichier texte.)
théorie: les variables sont des lieux de mémoire où nous stockons des données, identifié par un nom, nous pouvons stocker des données dans un fichier texte que si le processeur n'est pas nous permettre de les stocker dans des registres, et on peut accéder à sa valeur par la recherche de son identité (nom de variable) int le fichier texte, nos données sera la prochaine à elle.
ses juste une idée, il devrait fonctionner, mais je suppose que cela ne sera pas très simple et ur programme aura à payer en termes de vitesse.