печать имени переменной в #define
Я пытаюсь распечатать на консоли с помощью макроса имя переменной для отображения значения членов во время отладки ( ведения журнала ). Как это сделать? Я попробовал следующее, Но это не работает.
#define MY_PRINT(x) std::cout << "'x'=" << x << std::endl;
int main(){
int my_variable=3;
MY_PRINT( my_variable );
// I would like to print to console
// 'my_variable'=3
}
2 ответов
Ауч... Я нашел решение.
Я должен написать макрос такой
#define MY_PRINT(x) std::cout << #x"=" << x << std::endl
для C++ я использую этот:
#define STR(x) #x << '=' << x
int main()
{
int i = 1;
std::string str("hello");
std::vector<std::string> vec;
my_class mc;
...
std::cout << STR(i) << std::endl
<< STR(str) << std::endl
<< STR(vec) << std::endl
<< STR(mc) << std::endl;
return 0;
}
таким образом, компилятор выбирает оператор потоковой передачи на основе типа данных, поэтому вам не нужно беспокоиться о разных макросах для каждого, и он может перейти к любому std::ostream, а не только std::cout. Просто укажите соответствующий оператор потоковой передачи для ваших данных:
std::ostream operator<<(std::ostream&, const T&);
std::ostream operator<<(std::ostream&, const std::vector<T>&);
etc
но я хотел бы, чтобы был способ шаблона для замены макроса или, по крайней мере, имя переменной, предоставленное #x.