如何将Qt中的某些内容标记为过时(已弃用)?

时间:2010-11-14 20:56:17

标签: c++ qt qt4 deprecated obsolete

使用Qt 4.7在C ++中是否有Q_OBSOLETE或Q_DEPRECATED?

或者是否有类似的C ++宏或关键字?

5 个答案:

答案 0 :(得分:39)

如果您使用Q_DECL_DEPRECATED,您应该得到您正在寻找的结果,例如:

Q_DECL_DEPRECATED void foo();

答案 1 :(得分:1)

只需使用

即可
#warning 

指令

虽然不是C ++标准,但你不会遇到不支持它的编译器(see this SO question)。

答案 2 :(得分:1)

  1. 将实际功能拉出公共范围。
  2. 在公共范围内创建另一个具有相同名称的功能。
  3. 在该功能中插入警告/失败代码。
  4. 使用新内容调用原文。

答案 3 :(得分:0)

您可能想要自己做一些事情:

#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,或者只是在评论中指出它。

答案 4 :(得分:-3)

通过“弃用的构造”,您的意思是“已弃用的成员函数”。您需要编译时警告,以引起您对任何已弃用函数的调用站点的注意。

这在标准C ++中无法以任何合理的方式实现,我也没有看到G ++中支持这一点的任何属性。如果编译器已经没有对它有一些支持,Qt无法真正添加这样的功能。

但是,Microsoft Visual C ++支持__declspec(deprecated)扩展,我想可以为G ++ 4.5编写一个添加类似功能的编译器插件。