c++ - 移植旧代码时如何处理类名冲突?

标签 c++ namespaces ambiguity

我正在尝试将一个旧库(据我所知不使用 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/

相关文章:

c++ - 在任何情况下,返回 RValue 引用 (&&) 是有用的吗?

c++ - 是否有任何 C 或 C++ 标准识别内存映射文件的存在?

C++ 在数组中存储具有不同模板的相同类

c++ - 什么是类中的内联数据?

node.js - 使用 typescript 2 使用 sequelize 模型扩展 express 请求对象

Python 命名空间和模块

c# - 为 2 个不同的外部应用程序创建 2 组 .Net C# 插件,这些应用程序具有相同的 API(命名空间除外)

MySQL JOIN 独立于 WHERE 子句

c# - 为什么 .Net/C# 无法理解具有同名属性的接口(interface)继承?

c++ - 匿名命名空间歧义