开发者

How to mark something in Qt as obsolete(deprecated)?

Is there Q_OBSOLETE or Q_DEPRECATED in C++ with Qt 4.7?

Or is ther开发者_如何学Goe a similar C++ macro or keyword?


If you use Q_DECL_DEPRECATED you should get the outcome you are looking for e.g.:

Q_DECL_DEPRECATED void foo();


  1. Pull the real function out of public scope.
  2. Create another function with the same name in public scope.
  3. Insert your warning/fail code in that function.
  4. Call the original with the new.


Just use the

#warning 

directive

although is not C++ standard is quite unlikely you will encounter a compiler that does not support it (see this SO question).


You might want to do something similiar yourself:

#ifdef Q_TREAT_OBSOLETE_AS_ERRORS
#define Q_OBSOLETE(X) \
        BOOST_STATIC_ASSERT(false); \
        X

#else 
#define Q_OBSOLETE(X) X
#endif

This construction simply substitutes some deprecated code / part of code if there is no Q_TREAT_OBSOLETE_AS_ERRORS defined and generates compilation-time error otherwise.

Note that BOOST_STATIC_ASSERT has no scope limitations, so does the Q_OBSOLETE macro.

Probably this is not the best way to solve your problem and actually I'm not sure this is useful.

You might just mark the code as @obsolete or simply point it out in the comments.


By "deprecated constructs", you really mean "deprecated member functions". You're asking for a compile-time warning to draw your attention to the call site of any deprecated function.

This isn't possible in any reasonable way in standard C++, and I don't see any attributes in G++ that would support this either. Qt can't really add a feature like that if the compiler doesn't have some support for it already.

However, Microsoft Visual C++ supports an __declspec(deprecated) extension, and I would imagine it's possible to write a compiler plugin for G++ 4.5 that adds a similar feature.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜