Как отметить что-то в Qt как устаревшее(устаревшее)?
есть ли Q_OBSOLETE или Q_DEPRECATED в C++ с Qt 4.7?
или есть аналогичный макрос или ключевое слово c++?
5 ответов
под " устаревшими конструкциями "вы действительно подразумеваете"устаревшие функции-члены". Вы просите предупреждение во время компиляции, чтобы привлечь ваше внимание к сайту вызовов любой устаревшей функции.
Это невозможно каким-либо разумным образом в стандартном C++, и я не вижу никаких атрибутов в G++, которые бы поддерживали это. Qt не может действительно добавить такую функцию, если компилятор уже не поддерживает ее.
однако Microsoft Visual C++ поддерживает __declspec(deprecated)
расширение, и я бы предположил, что можно написать плагин компилятора для G++ 4.5, который добавляет аналогичную функцию.
Если вы используете Q_DECL_DEPRECATED, вы должны получить результат, который ищете, например:
Q_DECL_DEPRECATED void foo();
- вытащите реальную функцию из публичной области.
- создайте другую функцию с тем же именем в общедоступной области.
- вставьте код предупреждения / сбоя в эту функцию.
- вызовите оригинал с новым.
просто использовать
#warning
директива
хотя это не стандарт C++, маловероятно, что вы столкнетесь с компилятором, который его не поддерживает (см. это так вопрос).
возможно, вы захотите сделать что-то подобное сами:
#ifdef Q_TREAT_OBSOLETE_AS_ERRORS
#define Q_OBSOLETE(X) \
BOOST_STATIC_ASSERT(false); \
X
#else
#define Q_OBSOLETE(X) X
#endif
эта конструкция просто заменяет некоторые устаревшие код / часть кода, если нет Q_TREAT_OBSOLETE_AS_ERRORS
определено и генерирует ошибку времени компиляции в противном случае.
отметим, что BOOST_STATIC_ASSERT
не имеет ограничений по области применения, так и Q_OBSOLETE
макрос.
вероятно, это не лучший способ решить вашу проблему, и на самом деле я не уверен, что это полезно.
вы могли бы просто отметьте код как @obsolete
или просто укажите это в комментариях.