应该在头文件中使用C ++命名空间别名吗?

时间:2013-03-22 14:38:55

标签: c++ namespaces

在C ++标头中使用using namespaceconsidered bad practice。在标题中使用namespace aliasing同样是个坏主意,每个实现文件应该声明它希望使用的别名吗?

由于标题是您倾向于使用完全指定名称的位置(因为我们不在标题中使用名称空间),所以别名会很有用,但它们仍会在#included时通过您的源传播。

这里的最佳做法是什么?什么命名空间别名的范围?

2 个答案:

答案 0 :(得分:6)

如果您在标头中添加了命名空间别名,则此别名将成为您的(公共)API的一部分。

有时这种技术用于进行ABI兼容版本控制(或者至少可以看到破损),如下所示:

namespace lib_v1 { ... }
namespace lib_v2 { ... }
namespace lib = lib_v2;

或更常见的是:

namespace lib {
   namespace v1 {}
   namespace v2 {}
   using v2;
}

另一方面,如果你这样做只是为了节省一些打字,那可能不是一个好主意。 (仍然比使用using指令好得多)

答案 1 :(得分:1)

我用这种方式使用未命名的命名空间:

#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::...