Makro vs Szablon

0

Od czego zacząć aby stworzyć makro / szablon w stylu:

PROPERTY(Type type READ WRITE)

generalnie chciałbym aby to makro / szablon "pod maską" tworzyło obiekt klasy Type, dodawało go do prywatnej listy w klasie w której użyłbym tego makra a na podstawie tego czy występuje w nim READ / WRITE ustawiało w klasie "Type" flagi isReadable lub isWriteable do wartości true / false.

Za pomocą czego łatwiej to zrealizować? Wszelkie sugestie, linki mile widziane.

0

Napisz dokładnie co chcesz zrobić (wrzuć jakiś kod).

0

z mojego doswiadczenia to uzyj dowolnej rzeczy ktora dziala bo jak zaczniesz sie nad kazdym detalem swojego kodu zastanawiac to nigdy projektu nie skonczysz. upiekszanie zostaw sobie na koniec albo jak bedzie za duzy zamet

0

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:

Q_PROPERTY( Property name READ name WRITE setName) 

i później jest to łatwo dostępne poprzez QMetaObject:

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 ---

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;
    }
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1