Как отметить что-то в 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();

  1. вытащите реальную функцию из публичной области.
  2. создайте другую функцию с тем же именем в общедоступной области.
  3. вставьте код предупреждения / сбоя в эту функцию.
  4. вызовите оригинал с новым.

просто использовать

#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 или просто укажите это в комментариях.