应该在头文件中使用C ++名称空间别名?
在C ++头文件中using namespace
被认为是不好的做法。 在标题中使用名称空间别名同样是一个坏主意,每个实现文件都应该声明它希望使用的别名?
由于标题是你倾向于使用完全指定名称的地方(因为我们不在标题中使用名称空间),所以别名会很有用,但是当#included
时它们仍然会通过源传播。
这里最好的做法是什么? 命名空间别名的范围是什么?
如果您将名称空间别名放入您的头文件中,则此别名将成为您的(公共)API的一部分。
有时候这种技术被用来做ABI兼容的版本控制(或者至少使破损是可见的),如下所示:
namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;
或更常见:
namespace lib {
namespace v1 {}
namespace v2 {}
using v2;
}
另一方面,如果你这样做只是为了节省一些打字它可能不是一个好主意。 (仍然比使用using
指令更好)
我这样用无名命名空间来做:
#include <whatyouneed>
...
namespace {
typedef ...
using ..
namespace x = ...
// anything you need in header but shouldn't be linked with original name
}
// normal interface
class a: public x::...
链接地址: http://www.djcxy.com/p/70177.html
上一篇: Should C++ namespace aliasing be used in header files?
下一篇: How do I allow square brackets in my url in Codeigniter