Мне нужно создать некоторый механизм, который позволит мне объявить свойства класса (т. Е. Переменные-члены), к которым можно получить доступ через их имя, а также от обычного доступа к члену класса. Qt решил эту проблему с помощью очень удобного макроса Q_PROPERTY
, который на другом конце переваривается moc. Я не роскошь этого двухстадийной компиляции и ближе всего я мог бы получить это:Создание свойств класса с помощью макроса
class SomeClass
{
public:
SomeClass() : bla(9), v(9.4) {}
virtual ~SomeClass(){}
int bla;
double v;
BEGIN_ATTRIBUTES(SomeClass)
ATTRIBUTE(int, bla)
ATTRIBUTE(double, v)
END_ATTRIBUTES()
};
где есть очевидные макросы, которые скрывают уродливый механизм для хранения некоторых данных о члене класса, который подается в ужасный шаблонный монстр кода, и это работает, но это имеет тот недостаток, что вам нужно сначала объявить атрибуты класса, а затем у вас есть отдельный раздел, в котором вы фактически указываете член класса как атрибут.
Я бы еще как-то код, как:
class SomeClass
{
public:
SomeClass() : bla(9), v(9.4) {}
virtual ~SomeClass(){}
ATTRIBUTE(int, bla);
ATTRIBUTE(double, v);
};
Но независимо от того, насколько сильно я стараюсь, я просто не могу приблизиться к этой одной подкладке решения. Если бы кто-нибудь когда-либо реализовал что-то подобное, я был бы благодарен за несколько советов.
Почему хуже использовать Q_PROPERTY чем переопределять его? – nib