c++ - 模板实现文件中的匿名命名空间
问题描述
在 .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;
}
}
命名空间应该只在定义它们的代码块内有效。
推荐阅读
- c++ - 无效打印(矢量
) 功能不打印 - java - 具有区域设置语言的 Android 应用程序无法在组件上正确显示文本
- node.js - node Js控制台输入格式?
- actions-on-google - Google Assistant Smarthome:查询风扇转速总是失败
- php - PHP按类别排名
- python - 在 python 中使用 cytpes 模块设置 MS 桌面背景太慢,无法像视频一样使用。
- javascript - 如何在html标签“必需”和javascript“onClick”之间排序
- java - 崩溃时崩溃并出现此异常:java.lang.RuntimeException: Unknown constant type 18
- javascript - 来自雄辩的javascript listTo Array的练习:为什么列表的值不是全局的null
- intellij-idea - Intellij Enum 在覆盖方法上缩进