使用Qt 4.7在C ++中是否有Q_OBSOLETE或Q_DEPRECATED?
或者是否有类似的C ++宏或关键字?
答案 0 :(得分:39)
如果您使用Q_DECL_DEPRECATED,您应该得到您正在寻找的结果,例如:
Q_DECL_DEPRECATED void foo();
答案 1 :(得分:1)
答案 2 :(得分:1)
答案 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编写一个添加类似功能的编译器插件。