Возможно ли в c ++ получить в виде строки имя переменной, которая была передана как параметр?

Nov 29 2020

Я хотел бы иметь возможность сделать что-то подобное

int myVar = 3;

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

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

Ответы

4 cigien Nov 29 2020 at 19:14

Нет, вы пока не можете сделать это на языке C ++, поскольку для этого нет средства отражения.

Однако вы можете использовать макросы препроцессора для достижения желаемого эффекта. Обратите внимание, что макросы опасны, и их следует по возможности избегать.

Сначала напишите функцию реализации, которая принимает значение параметра и имя параметра, например:

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

Затем вы можете написать макрос, который генерирует строку из имени переменной в сайте вызова, используя #(оператор строкового преобразования), а затем использует эту строку в вызове функции реализации:

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

Вот демо .