如何将Qt中的内容标记为过时(不推荐)? < C++ > Qt 4.7?中有Q>过时或Qy不成立? 还是有类似的C++宏或关键字?

如何将Qt中的内容标记为过时(不推荐)? < C++ > Qt 4.7?中有Q>过时或Qy不成立? 还是有类似的C++宏或关键字?,c++,qt,qt4,deprecated,obsolete,C++,Qt,Qt4,Deprecated,Obsolete,你可能想做一些类似的事情: #ifdef Q_TREAT_OBSOLETE_AS_ERRORS #define Q_OBSOLETE(X) \ BOOST_STATIC_ASSERT(false); \ X #else #define Q_OBSOLETE(X) X #endif 如果没有定义Q\u将废弃的视为错误,则此构造只是替换一些不推荐使用的代码/部分代码,否则会生成编译时错误 请注意,BOOST\u STATIC\u ASSERT没有范围限制,Q\u

你可能想做一些类似的事情:

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

#else 
#define Q_OBSOLETE(X) X
#endif
如果没有定义
Q\u将废弃的视为错误
,则此构造只是替换一些不推荐使用的代码/部分代码,否则会生成编译时错误

请注意,
BOOST\u STATIC\u ASSERT
没有范围限制,
Q\u obsolite
宏也没有范围限制

也许这不是解决你问题的最好方法,实际上我不确定这是否有用

您可以将代码标记为“过时的”,或者在注释中指出它。

只需使用

#warning 
指示

<>虽然不是C++标准,但你不太可能遇到一个不支持它的编译器().< /p>< p>由“弃权构造”,你的意思是“弃用成员函数”。您要求提供编译时警告,以提请注意任何不推荐使用的函数的调用站点

<>这在标准C++中是不可能的,我也没有看到G++中的任何属性也能支持这个。如果编译器还没有对它的支持,那么Qt就不能真正添加这样的特性

但是,微软Visual C++支持扩展,我想可以编写一个G+ 4.5的编译器插件,添加了类似的特性。

  • 将真正的功能从公共范围中拉出
  • 在公共作用域中创建另一个同名函数
  • 在该函数中插入警告/失败代码
  • 用新的来称呼原版

  • 如果您使用Q_DECL_DEPRECATED,您应该会得到您想要的结果,例如:

    Q_DECL_DEPRECATED void foo();
    

    您希望这样的宏或关键字做什么?如果在使用中发现不推荐的构造,则发出警告。请参阅以获得更好的解释。这不起作用。如果编译了不推荐使用的代码,无论该代码是否从其他地方调用,这都会导致编译错误。@Ken很明显,您没有办法检查是否确实调用了某个代码块。这种静态断言只是帮助人们关注不推荐特性的编译。事实上,所有这些过时的东西对我来说似乎都是不必要的。他这么问(我想)是因为他已经习惯了Java,Java可以将函数注释为不推荐的,当你尝试使用它们时,会给你一个编译器警告。Windows/MSVC是Qt的一个相当常见的目标,所以我不得不不同意“不太可能”无法以这种方式发出编译时警告。我似乎错过了G++中的
    \uuuu attribute\uuuu((弃用))
    。顺便说一下,在c++14中,有
    [[deprecated]]]
    关键字,您可以添加到一些函数中。我的情况是,我确实在函数名void foo()Q\u DECL\u弃用后使用了该属性;