0 votes

La fonction isDefined ?

En C++, existe-t-il une fonction qui renvoie "vrai" lorsque la variable est définie ou faux dans l'autre sens. Quelque chose comme ceci :

bool isDefined(string varName)
{
    if (a variable called "varName" is defined)
      return true;
    else
      return false;
}

11voto

C++ n'est pas un langage dynamique. Ce qui signifie que la réponse est pas de . Vous le savez au moment de la compilation, pas au moment de l'exécution.

6voto

Arkaitz Jimenez Points 10651

Le runtime n'existe pas, car cela n'a pas de sens dans un langage non dynamique comme le C++.

Cependant, vous pouvez l'utiliser à l'intérieur d'un sizeof pour tester s'il existe au moment de la compilation sans effets secondaires.

(void)sizeof(variable);

Cela arrêtera la compilation si var n'existe pas.

1voto

Falaina Points 4760

Comme nous l'avons déjà indiqué, le système d'exécution C++ ne permet pas de demander si une variable est déclarée ou non. En général, un binaire C++ ne contient pas d'informations sur les symboles des variables ou leurs correspondances avec leur emplacement. Techniquement, ces informations seraient disponibles dans un binaire compilé avec des informations de débogage, et vous pourriez certainement interroger les informations de débogage pour voir si un nom de variable est présent à un emplacement donné dans le code, mais ce serait au mieux un sale hack (si vous êtes curieux de voir à quoi cela pourrait ressembler, j'ai posté un terrible snippet @ http://stackoverflow.com/questions/1118705/call-a-function-named-in-a-string-variable-in-c/1118808#1118808 qui appelle une fonction C par une chaîne de caractères en utilisant les informations de débogage DWARF. Il n'est pas conseillé de faire une telle chose)

1voto

Cristian Adam Points 3691

Microsoft propose deux extensions à C++ nommées : __if_exists y __if_not_exists . Ils peuvent être utiles dans certains cas, mais ils ne prennent pas d'arguments de type chaîne.

Si vous avez vraiment besoin d'une telle fonctionnalité, vous pouvez ajouter toutes vos variables à un ensemble et ensuite interroger cet ensemble pour connaître l'existence des variables.

0voto

sellibitze Points 13607

Non. Ce n'est pas comme si vous aviez un système d'exécution autour du C++ qui se souvient des variables avec des noms dans une sorte de table (méta-données) et vous permet d'accéder à une variable par une chaîne générée dynamiquement. Si vous voulez cela, vous devez le construire vous-même, par exemple en utilisant un std::map qui fait correspondre des chaînes de caractères à certains objets.

Un mécanisme de compilation pourrait être intégré au langage. Mais je ne pense pas qu'il serait utile.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X