Всем привет.
Мне как программисту на С++ с некоторым, но таки, стажем стало интересно немного разобраться в ООП. Но сейчас не об этом.
Можно ли как-то создать такую функцию, которая для каждой переменной могла бы сказать ее идентификатор?
Магическим образом решение было найдено:
#define id(x) #x
Но при чем тут ООП? Вот при чем: допустим у нас есть класс Point в котором есть координаты x и y. Можно ли как-нибудь написать метод внутри этого класса который возращал бы идентификатор объекта и его x и y?
UPD. макрос id работает поистине магически. Код cout << #x;
не работает, тогда как c макросом все в норме.
Думаю, что нет, нельзя. Только макросами.
Причина: имена переменных с концами умирают на этапе компиляции. А вы хотите их оставить. Значит, нужно их как-то в строки превращать. Либо руками, либо макросами, которые это умеют.
Более глубокая причина: если класс у вас объявлен в другом файле, то он тем более ничего не знает про те места, из которых будет вызываться. Поэтому, чтобы сделать такую функцию методом класса, надо в неё явно передавать имя переменной. Опять же — либо руками, либо макросами.
А
#x
— это, действительно, чисто макроконструкция, это не оператор языка. Поэтому работает только в макросах, при их разворачивании.Большое спасибо. Очень полезная ссылка.
Вообще понятие идентификатор для объекта вещь довольно странная.
Например я бы не ожидал, что в коде
замена y на x в последней строке что-то меняла ибо это один и тот же объект.