从嵌套的名称空间注入类型:使用Typedef
Injecting types from nested namespaces: Typedef or using?
我有一个大的软件框架,它目前生活在一个公共命名空间中。最近,我将一些类移到了嵌套的名称空间中,但是为了暂时保持向后兼容性,我需要将这些名称保留在全局名称空间中。到目前为止,我使用using
:
namespace framework {
namespace IO {
struct IStream;
}
#if COMPATIBILITY
using IO::IStream;
#endif
}
然而,我同样可以很好地使用typedef IO::IStream IStream;
。
typedef
与using
相比有什么优缺点?它们有些不同:typedef引入了一个新的类型名称framework::IStream
,而using指令只影响它出现的作用域内的名称查找。(如果你还定义一个单独的,真正的类型framework::IStream
,这有额外的影响,但因为你没有这样做,这不是一个问题。)
using
是一个实现细节,这比引入新类型名称所带来的全局语义变化更可取。因此,如果您可以摆脱它,请在需要的范围内使用using
指令,并且您可以逐渐将它们迁移到新系统。
相关文章:
- 通过依赖类型使用非类型模板参数的单类型模板参数类模板的部分专用化
- 为什么在以下情况下不需要为依赖类型使用typename
- 如何检查联合是否包含类型(使用 type_traits)?
- 避免对非类类型使用指向成员函数的指针
- 对标准类型使用原子操作
- 使用枚举确定返回结果的类型(使用宏的黑客)
- 为什么 std::vector 允许对其包含的类型使用可抛出的移动构造函数?
- 在模板中使用类型类型的类型类型使用模板类别IT自我
- 错误:未命名类型(使用 auto)
- 是否应该对复杂数据类型使用访问器
- Windows的unicode数据类型使用什么unicode编码(UTF-8、UTF-16等)
- 表达式必须具有类类型(使用结构数组作为函数参数)
- 为什么无法识别此模板类拥有的类的类型(使用模板类型)
- C/C++对一块内存进行malloc,然后对不同的任意类型使用不同的部分
- 在C++引物中对函数指针类型使用auto或decltype
- C++中是否有类似于 Java 的 CompareTo 方法,您可以在其中对数据类型使用 > < = 操作
- 为什么 WinAPI 对 BOOL 类型使用 int(32 位)
- 对非指针类型使用 static_cast 而不是 C 样式强制转换有什么好处
- C++使用别名访问嵌套类型(使用 vs typedef)
- 如何在QList中对自定义类型使用qSort