É possível em c ++ obter como uma string o nome de uma variável que foi passada como um parâmetro?

Nov 29 2020

Eu gostaria de poder fazer algo assim

int myVar = 3;

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

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

Respostas

4 cigien Nov 29 2020 at 19:14

Não, você ainda não pode fazer isso na linguagem C ++, pois não há facilidade de reflexão para fazer isso.

No entanto, você pode usar macros de pré-processador para obter o efeito desejado. Observe que as macros são perigosas e devem ser evitadas tanto quanto possível.

Primeiro, escreva uma função de implementação que leve o valor do parâmetro e o nome do parâmetro, como este:

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

Em seguida, você pode escrever uma macro que gera uma string a partir do nome da variável no site de chamada, usando #(o operador de stringificação) e, em seguida, usa essa string na chamada para a função de implementação:

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

Aqui está uma demonstração .