13

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

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

4

5 回答 5

48

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

Q_DECL_DEPRECATED void foo();
于 2012-04-03T21:53:29.133 回答
1

只需使用

#warning 

指示

虽然不是 C++ 标准,但您不太可能遇到不支持它的编译器(请参阅此 SO 问题)。

于 2010-11-15T04:24:05.367 回答
1
  1. 将真正的功能拉出公共范围。
  2. 在公共范围内创建另一个具有相同名称的函数。
  3. 在该函数中插入警告/失败代码。
  4. 用新的调用原来​​的。
于 2010-11-15T17:23:47.597 回答
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或简单地在注释中指出它。

于 2010-11-14T21:49:00.120 回答
-4

通过“不推荐使用的构造”,您实际上是指“不推荐使用的成员函数”。您要求编译时警告以引起您对任何已弃用函数的调用站点的注意。

这在标准 C++ 中不可能以任何合理的方式实现,而且我在 G++ 中也看不到任何支持这一点的属性。如果编译器还没有对它的支持,Qt 就不能真正添加​​这样的功能。

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

于 2010-11-15T05:10:17.493 回答