Gibt es Q_OBSOLETE oder Q_DEPRECATED in C++ mit Qt 4.7?Wie markiere ich etwas in Qt als veraltet (veraltet)?
Oder gibt es ein ähnliches C++ Makro oder Schlüsselwort?
Gibt es Q_OBSOLETE oder Q_DEPRECATED in C++ mit Qt 4.7?Wie markiere ich etwas in Qt als veraltet (veraltet)?
Oder gibt es ein ähnliches C++ Makro oder Schlüsselwort?
Mit "veraltete Konstrukte" meinen Sie eigentlich "veraltete Memberfunktionen". Sie fragen nach einer Kompilierungswarnung, um Ihre Aufmerksamkeit auf die Aufrufseite einer veralteten Funktion zu lenken.
Dies ist in Standard C++ in keiner vernünftigen Weise möglich, und ich sehe keine Attribute in G ++, die dies auch unterstützen würden. Qt kann ein solches Feature nicht wirklich hinzufügen, wenn der Compiler noch keine Unterstützung dafür hat.
Allerdings unterstützt Microsoft Visual C++ eine __declspec(deprecated)
Erweiterung, und ich könnte mir vorstellen, dass es möglich ist, ein Compiler-Plugin für G ++ 4.5 zu schreiben, das eine ähnliche Funktion hinzufügt.
Es scheint, ich habe '__attribute __ ((veraltet))' in G ++ verpasst. –
Sie könnten etwas similiar selbst tun wollen:
#ifdef Q_TREAT_OBSOLETE_AS_ERRORS
#define Q_OBSOLETE(X) \
BOOST_STATIC_ASSERT(false); \
X
#else
#define Q_OBSOLETE(X) X
#endif
Diese Konstruktion einfach ersetzt einig veralteten Code/Teil des Codes, wenn es keine Q_TREAT_OBSOLETE_AS_ERRORS
definiert ist und ansonsten Kompilierung-Zeitfehler erzeugt.
Beachten Sie, dass BOOST_STATIC_ASSERT
keine Bereichsbeschränkungen hat, so gilt das Q_OBSOLETE
Makro.
Wahrscheinlich ist dies nicht der beste Weg, um Ihr Problem zu lösen, und ich bin mir nicht sicher, ob dies nützlich ist.
Sie können den Code einfach als @obsolete
markieren oder einfach in den Kommentaren darauf hinweisen.
Dies funktioniert nicht. Dies führt zu Kompilierungsfehlern, wenn der veraltete Code ** kompiliert ** ist, unabhängig davon, ob dieser Code von woanders aufgerufen wird oder nicht. –
@Ken Nun, es ist offensichtlich, dass Sie keine Möglichkeit haben, zu überprüfen, ob ein Code-Chunk tatsächlich aufgerufen wird. Diese statische Assertions-Funktion hilft nur, die Aufmerksamkeit auf die Kompilierung veralteter Features zu lenken. * Eigentlich scheint all dieses Q_OBSOLETE-Zeug für mich ziemlich unnötig zu sein.* –
fragt er (glaube ich), weil er an Java gewöhnt ist, der Funktionen als veraltet markieren kann und Ihnen eine Compilerwarnung gibt, wenn Sie versuchen, sie zu benutzen. –
gerade die
#warning
Richtlinie verwenden, obwohl nicht C++ Standard ist ziemlich unwahrscheinlich, dass Sie einen Compiler begegnen, die nicht unterstützt wird (see this SO question).
Windows/MSVC ist ein ziemlich häufiges Ziel für Qt, daher muss ich "ziemlich unwahrscheinlich" widersprechen. –
Auf diese Weise kann keine Kompilierungszeitwarnung ausgegeben werden. –
Wenn Sie Q_DECL_DEPRECATED verwenden Sie das Ergebnis erhalten, sollten Sie für beispiels suchen .:
Q_DECL_DEPRECATED void foo();
sollte dies die akzeptierte Antwort sein. – dom0
Was möchten Sie tun so ein Makro oder Stichwort zu tun? – bjoernz
Eine Warnung ausgeben, wenn veraltete Konstrukte in Verwendung sind. Siehe http://en.wikipedia.org/wiki/Deprecation für eine bessere Erklärung. –