我有一个大型软件框架,目前位于公共(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/