首页 > 解决方案 > 仅在 *调用* 已弃用的方法时发出警告

问题描述

我想在基类中标记一个纯虚方法deprecated,并在有人尝试在某处调用该方法(或其覆盖)时获得编译器警告,但不是像现在这样,对于覆盖的每个声明 - 因为该方法在基类中是纯虚拟的,所有子类都必须将其实现为可实例化,但这意味着这些覆盖中的每一个都会产生一个(或多个)编译器警告,这有点垃圾输出。因此,我只想在调用方法(或覆盖之一)时才发出警告。

这是否可能以某种方式不跳过箍*?

PS:我使用以下宏将基本方法标记为已弃用:

#if defined(_MSC_VER)
    #define DEPRECATED __declspec(deprecated)
#elif defined(__GNUC__) || defined(__clang__)
    #define DEPRECATED __attribute__((deprecated))
#else
    #pragma message("WARNING: DEPRECATED macro not implemented for this compiler")
    #define DEPRECATED
#endif

…我目前正在 VS2015 中编译。如果我仅将基本方法标记为已弃用,并且如果我在基本方法和覆盖上都使用宏,则会输出编译器警告。

*)就像将 message(...) 或静态断言放入每个覆盖的函数定义中并内联它们,或者类似的东西......我认为这不值得。

标签: c++c++11deprecation-warning

解决方案


推荐阅读