Najprościej mówiąc szukam "zamiennika" dla makra Q_PROPERTY z Qt bo muszę przepisać kilka klas a te w Qt używają mnóstwo makr w stylu:
Kopiuj
Q_PROPERTY( Property name READ name WRITE setName)
i później jest to łatwo dostępne poprzez QMetaObject:
Kopiuj
const QMetaObject* meta = this->metaObject();
int id = meta->indexOfProperty(nameOfProperty);
if( id >= 0 ) {
QMetaProperty prop = meta->property(id);
}
Zdaje sobie sprawę że nie osiągnę identycznego zachowania w C++ bo tutaj w gre wchodzi moc ale szukam rozwiązania podobnego.
Potrzebuje mechanizm definiowania właściwości dla klasy ( które będą składowane pod postacią osobnej klasy np MetaObject w sekcji private ) które mogą być tylko do odczytu lub do odczytu i zapisu.
Dzięki temu gdy użytkownik będzie chciał ustawić jakąś właściwość dla klasy to kod mógłby wyglądać tak:
--- pseudokod ---
Kopiuj
bool setProperty(const QString &name, const QString &value);
{
const MetaObject& meta = this->metaObject();
int id = meta.indexOfProperty(name);
if( id >= 0 ) {
Property prop = meta.property(id);
if( !prop.isWritable() ) {
qWarning("Property is not writable!");
return false;
}
prop.setValue(value);
return true;
}
}