Ich habe einige interessante Notwendigkeit, einen Kompilierungsfehler anzuzeigen, wenn die Deklaration des Typs I gegeben wurde, enthält das Q_OBJECT
Makro nicht. Ich habe einen schlechten Weg gefunden, es zu tun. Eigentlich wiederholt es die Idee der Qt-Entwickler den gleichen Trick zu tun:Überprüfen von Q_OBJECT Makro mit static_assert
template<typename T>
void checkForQObjectMacro()
{
reinterpret_cast<T *>(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast<T *>(0));
}
Das funktioniert gut, aber es gibt in der Tat seltsame Fehlermeldung. Ich möchte eine lesbare Nachricht anzeigen. Ein Weg, dies zu tun, ist die Verwendung static_assert
Konstruktion. Aber ich habe keine Ahnung, wie man die statisch verifizierte Bedingung Q_OBJECT
Makro Präsenz implementieren. Vielleicht kann jemand einen schönen Hack vorschlagen? Auch jede Idee wird sehr geschätzt.
Vielen Dank, ich vergessen, dass meine Qt-Version veraltet ist, scheint, dass sie es nur in 5.2 getan haben – dvvrd