Est-il possible en C ++ d'obtenir sous forme de chaîne le nom d'une variable qui a été passée en paramètre?

Nov 29 2020

J'aimerai pouvoir faire quelque chose comme ça

int myVar = 3;

void logger(int param) {
  std::cout << nameOf(param) << ": " << param << std::endl;
}

logger(myVar); // prints "myVar: 3"

Réponses

4 cigien Nov 29 2020 at 19:14

Non, vous ne pouvez pas encore faire cela en langage C ++, car il n'y a pas de fonction de réflexion pour le faire.

Cependant, vous pouvez utiliser des macros de préprocesseur pour obtenir l'effet souhaité. Notez que les macros sont dangereuses et doivent être évitées dans la mesure du possible.

Tout d'abord, écrivez une fonction d'implémentation qui prend la valeur du paramètre et le nom du paramètre, comme ceci:

void logger_impl(int param, std::string param_name) {
  std::cout << param_name << ": " << param << std::endl;
}

Ensuite, vous pouvez écrire une macro qui génère une chaîne à partir du nom de la variable dans le site d'appel, en utilisant #(l'opérateur de stringification), puis utilise cette chaîne dans l'appel à la fonction d'implémentation:

#define logger(p) logger_impl(p, #p)

Voici une démo .