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

问题描述 投票:0回答:6

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

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

c++ qt qt4 deprecated obsolete
6个回答
49
投票

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

Q_DECL_DEPRECATED void foo();

1
投票
  1. 将真正的功能拉出公共范围。
  2. 在公共范围内创建另一个同名函数。
  3. 在该函数中插入警告/失败代码。
  4. 用新来称呼原来的。

1
投票

只需使用

#warning 

指令

虽然不是 C++ 标准,但你不太可能遇到不支持它的编译器(参见这个 SO 问题)。


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
或直接在评论中指出。


0
投票

2023:
是的,Qt 为此目的定义了

Q_DEPRECATED
Q_DEPRECATED_X
宏:

Q_DEPRECATED void myOldFunc();
Q_DEPRECATED_X("use myNewFunc instead") void myOldFunc2();

区别只是短信。如果您使用 C++ 14+,则似乎会在幕后使用 C++14 中定义的

[[deprecated]]
属性。


-4
投票

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

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

但是,Microsoft Visual C++ 支持

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

© www.soinside.com 2019 - 2024. All rights reserved.