我在一个框架上进行了重命名,该框架已对其所有类和函数进行了重命名,我创建了一个过渡 header ,允许使用旧名称:

#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 yield :



GCC产量:



任一编译器均未针对NewClassA newA;发出警告。

08-28 05:48