c++ - 弃用 C++ 中类的旧名称

标签 c++ macros typedef c-preprocessor deprecated

我在一个已经大量重命名了它的所有类和函数的框架上工作,我创建了一个允许使用旧名称的转换头:

#define OldClassA NewClassA
#define OldClassB NewClassB
...

现在我希望编译器在使用旧名称时警告用户。我该怎么做?

int main(){
  NewClassA newA;
  OldClassA oldA; // <-- This one would emit a warning
}

最佳答案

正如其他人所说,这是非常特定于编译器的。假设您的类是用新名称定义的。以下是您可以使用 GCC 和 MSVC 执行的操作:

class NewClassA {}; // Notice the use of the new name.

// Instead of a #define, use a typedef with a deprecated atribute:

// MSVC
typedef NewClassA __declspec(deprecated) OldClassA;

// GCC
//typedef NewClassA __attribute__((deprecated)) OldClassA;

int main(){
    NewClassA newA;
    OldClassA oldA;
}

MSVC 产量:

warning C4996: 'OldClassA': was declared deprecated

GCC 产量:

warning: 'OldClassA' is deprecated

任一编译器都不会为 NewClassA newA; 发出警告。

关于c++ - 弃用 C++ 中类的旧名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17696217/

相关文章:

c - 这个 MIN 宏是如何工作的?

c - typedef 结构说明

c - 在C中使用typedef时,它会创建一个新类型还是只创建一个类型名?

c++ - 使用 QProcess 仅根据需要 zcat 行数?

android - 使用 Qt Creator 为 Android 构建 Qt 应用程序时出错

scala - 是否可以集成 Cake-Pattern 和宏?

scala - 在运行时访问函数源代码的宏

c - Structs 中的 Structs 按顺序排列

c++ - 基于不同坐标系旋转图像

c++ - 调试断言失败