c++ - 从嵌套命名空间注入(inject)类型: Typedef or using?

标签 c++

我有一个大型软件框架,目前位于公共(public)命名空间中。最近,我将一些类移至嵌套命名空间中,但为了暂时保持向后兼容性,我需要将名称保留在全局命名空间中。到目前为止,我正在使用using:

namespace framework {
  namespace IO {
    struct IStream;
  }
#if COMPATIBILITY
using IO::IStream;
#endif 
}

但是,我同样可以使用typedef IO::IStream IStream;。与 using 相比,使用 typedef 是否有一些优点/缺点?

最佳答案

它们有些不同:typedef 引入了一个新的类型名称 framework::IStream,而 using 指令仅影响它出现的范围内的名称查找。 (如果您定义一个单独的、真正的类型framework::IStream,这会产生额外的影响,但由于您没有这样做,所以这不是问题.)

从这个意义上说,我想说 using 是一个实现细节,这比引入新类型名称带来的全局语义更改更可取。因此,如果您可以摆脱它,请在需要的范围内使用 using 指令,然后您可以逐渐将它们迁移到新系统。

关于c++ - 从嵌套命名空间注入(inject)类型: Typedef or using?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7660348/

相关文章:

c++ - 从 Visual C++ 移植到 Linux

c++ - 在 vlc-qt/libvlc 中调整视频方向

c++ - 为什么我不能模板重载?

c++ - 异常是如何在幕后实现的?

c++ - 代码块找不到头文件

c++ - 如何解码非关键 ASN1 数据?

c++ - 非依赖名称场景中模板基类的名称查找

c++推导函数指针类型

c++ - 快速选择 DOM 中的元素

c++ - 哪些规则控制在类型之间使用多个用户定义的转换?