模板实现文件中的匿名命名空间



在.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;

这应该可以做到:

// object.h
{
namespace {
using verbose::namespace::type;
}
...
struct object {  
type value;
}
}

命名空间应仅在其定义的代码块内有效。

相关内容

  • 没有找到相关文章

最新更新