在.cpp文件中,匿名名称空间基本上具有文件范围的链接(在#includes之后),因为.cpp文件将永远不会被另一个文件包含。但是,头文件中的相同模式会将匿名名称空间传播到它所包含的任何位置。是否可以在头文件中创建类似的效果?我问是因为模板实现必须在标题中。
常规.h文件中的一个简单示例是:
// object.h
namespace {
using verbose::namespace::type;
}
...
struct object {
type value;
}
或类似地在某些模板实现文件中。 type
类型将是包含此文件的任何地方的范围。
有没有办法解决这个问题?
编辑:我认为我找到了一个冗长但可行的答案。
// object.h
struct Namespace {
using verbose::namespace::type;
Namespace() = delete;
struct object {
type value;
};
};
using Namespace::object;
答案 0 :(得分:-1)
这应该可以解决问题:
// object.h
{
namespace {
using verbose::namespace::type;
}
...
struct object {
type value;
}
}
名称空间仅在定义它们的代码块内有效。