我正在尝试将一个旧库(据我所知不使用 namespace )移植到现代编译器。我的目标之一无法区分 System::TObject 和::TObject(没有 namespace )。 System::TObject 是编译器原生的。
我试过一个 using 指令,即 using::TObject;
但这并没有做到。
显而易见的解决方案是将所有原始库包装在一个命名空间中,然后按名称调用它——这样可以避免歧义。但这是最明智的解决方案吗?还有其他解决办法吗?添加命名空间需要更改一堆文件,我不知道以后是否会产生不必要的影响。
最佳答案
您可以按照 Dib 的建议进行操作,稍作修改:
// In a wrapper header, eg: include_oldlib.h...
namespace oldlib
{
#include "oldlib.h"
};
#ifndef DONT_AUTO_INCLUDE_OLD_NAMESPACE
using namespace oldlib;
#endif
这允许您仅在发生冲突的文件中 #define 排除,否则将所有符号用作全局符号。
关于c++ - 移植旧代码时如何处理类名冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/189921/