la conversion d'un nom de variable à une chaîne de caractères en C++
J'aimerais afficher des données dans un fichier. Par exemple, supposons que j'ai deux vecteurs de doubles:
vector<double> data1(10);
vector<double> data2(10);
est-il un moyen facile pour la sortie à un fichier, de sorte que la première ligne contient les rubriques "data1" et "data2", suivi par le contenu réel. La fonction qui
sorties les données seront transmises différents tableaux afin de coder en dur le nom de
de la rubrique n'est pas possible - idéalement, je voudrais convertir le nom de la variable
pour une chaîne de caractères, puis sortie de la chaîne de suivi par le contenu du tableau de vecteurs. Cependant, je ne suis pas sûr de savoir comment convertir le nom de la variable 'data1" pour une chaîne de caractères,
ou si en fait il peut facilement être fait (en lisant les forums je pense qu'il ne peut pas)
Si ce n'est pas possible, une autre solution pourrait être d'utiliser un cadre associatif
conteneur comme la carte ou peut-être plus simplement un 'pair' de conteneurs.
pair<vector<double>,string> data1(10,'data1');
Toute suggestion serait la bienvenue!
- Je me demande de ce que vous essayez d'atteindre. Si elle est arbitraire quantités de données, de nommer chaque partie de ne pas vous faire du bien, parce qu'il doit être fait à la main de toute façon. Votre deuxième solution, c'est probablement que vous cherchez.
- Wow, c'est un peu trickey, une chose que vous pourriez essayer de faire est de créer des classes ou des structures qui ont un élément qui est la chaîne de caractères 'nom'.
- connexes stackoverflow.com/questions/201593/...
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser le préprocesseur "stringify"
#
à faire ce que vous voulez:(Désolé pour
printf
, je n'ai jamais eu le coup de<iostream>
. Mais cela devrait être suffisant.)essayez ceci:
//les fonctions de
Vous pouvez utiliser le préprocesseur, il y a un stringify jeton, mais il est uniquement disponible à partir de la source, et non à une fonction (que vous obtenez le nom d'argument).
J'ai eu le même problème. Après un peu d'expérimentation, j'ai créé des macros suivantes qui convertir les noms de variables, les champs, les fonctions, les méthodes et les types de chaînes de caractères.
Le code utilise l'opérateur virgule et non avenue la conversion en vigueur compilateur pour vérifier si la variable, de fonction, etc. existe vraiment. La bonne chose est qu'il fonctionne bien avec des variables non initialisées trop. Je l'ai testé sur les deux VC et GCC avec tous les pédant options que j'ai trouvé sans aucun message d'avertissement.
- Je utiliser ce code lorsque j'écris des analyseurs qui lit les données à partir du flux d'entrée et si analysée variable est hors limites, il déclenche une exception avec le nom de la variable que j'ai raté mon contrôle de la validité.
Légèrement adapté de @sarnold réponse, pour le C++:
Un exemple de programme qui utilise cette:
J'aurais pensé la réponse la plus évidente est de faire la fonction qui effectue la sortie prendre le texte d'en-tête comme un paramètre de chaîne.
Pour ce cas, j'ai fait nameof() macro. Elle renvoie une std::string nom d'une variable, de type ou de ses membres. Il fonctionne comme nameof() en C#.
Par Exemple: