C++ 命名空间建议

2024-01-04

我刚刚自学 C++ 命名空间(来自 C# 背景),我真的开始认为,即使 C++ 比大多数其他语言做得更好,嵌套命名空间也不是其中之一!

我是否正确地认为,为了声明一些嵌套名称空间,我必须执行以下操作:

namespace tier1
{
    namespace tier2
    {
        namespace tier3
        {
            /* then start your normal code nesting */
        }
    }
}

相对于:

namespace tier1::tier2::tier3
{
}

à la C#?

当我需要转发声明时,这变得更加疯狂:

namespace tier1
{
    namespace tier2
    {
        namespace forward_declared_namespace
        {
            myType myVar; // forward declare
        }
        namespace tier3
        {
            /* then start your normal code nesting */
            class myClass
            {
                forward_declared_namespace::myType myMember;
            }
        }
    }
}

请记住,我开发的典型系统包括:

MyCompany::MySolution::MyProject::System::[PossibleSections]::Type

这就是为什么您在 C++ 示例中很少看到命名空间的使用吗?或者通常只有单个(非嵌套)命名空间?

UPDATE

对于任何有兴趣的人来说,这就是我的结局 http://www.adamjamesnaylor.com/2012/10/23/NestedNamespacesInC.aspx解决这个问题。


C++ 命名空间并不是一种设计机制 - 它们的存在只是为了防止名称冲突。在 99.99% 的情况下,您确实不想或不需要使用嵌套命名空间。

在 C++ 中正确使用命名空间的一个很好的例子是 C++ 标准库。这个相当大的库中的所有内容都放置在一个名为的命名空间中std- 没有尝试或需要将库分解为(例如)I/O 子命名空间、数学子命名空间、容器子命名空间等。

C++ 中建模的基本工具是类(某种程度上是模板),而不是命名空间。如果你觉得需要嵌套,你应该考虑使用嵌套类,它比命名空间有以下优点:

  • 他们有方法
  • 他们可以控制访问
  • 它们无法重新打开

考虑到这些后,如果您仍然希望使用嵌套命名空间,请务必这样做 - 以这种方式使用它们在技术上没有任何问题。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C++ 命名空间建议 的相关文章

  • 我如何才能等待多个事情

    我正在使用 C 11 和 stl 线程编写一个线程安全队列 WaitAndPop 方法当前如下所示 我希望能够将一些内容传递给 WaitAndPop 来指示调用线程是否已被要求停止 如果 WaitAndPop 等待并返回队列的元素 则应返回
  • 以文化中立的方式将字符串拆分为单词

    我提出了下面的方法 旨在将可变长度的文本拆分为单词数组 以进行进一步的全文索引处理 删除停止词 然后进行词干分析 结果似乎不错 但我想听听关于这种实现对于不同语言的文本的可靠性的意见 您会建议使用正则表达式来代替吗 请注意 我选择不使用 S
  • GLKit的GLKMatrix“列专业”如何?

    前提A 当谈论线性存储器中的 列主 矩阵时 列被一个接一个地指定 使得存储器中的前 4 个条目对应于矩阵中的第一列 另一方面 行主 矩阵被理解为依次指定行 以便内存中的前 4 个条目指定矩阵的第一行 A GLKMatrix4看起来像这样 u
  • 动态加载程序集的应用程序配置

    我正在尝试将模块动态加载到我的应用程序中 但我想为每个模块指定单独的 app config 文件 假设我的主应用程序有以下 app config 设置
  • 在哪里可以找到列出 SSE 内在函数操作的官方参考资料?

    是否有官方参考列出了 GCC 的 SSE 内部函数的操作 即 头文件中的函数 除了 Intel 的 vol 2 PDF 手册外 还有一个在线内在指南 https www intel com content www us en docs in
  • 类模板参数推导 - clang 和 gcc 不同

    下面的代码使用 gcc 编译 但不使用 clang 编译 https godbolt org z ttqGuL template
  • 不同枚举类型的范围和可转换性

    在什么条件下可以从一种枚举类型转换为另一种枚举类型 让我们考虑以下代码 include
  • 使用 WebClient 时出现 System.Net.WebException:无法创建 SSL/TLS 安全通道

    当我执行以下代码时 System Net ServicePointManager ServerCertificateValidationCallback sender certificate chain errors gt return t
  • C#中如何移动PictureBox?

    我已经使用此代码来移动图片框pictureBox MouseMove event pictureBox Location new System Drawing Point e Location 但是当我尝试执行时 图片框闪烁并且无法识别确切
  • 重载<<的返回值

    include
  • 使用 Bearer Token 访问 IdentityServer4 上受保护的 API

    我试图寻找此问题的解决方案 但尚未找到正确的搜索文本 我的问题是 如何配置我的 IdentityServer 以便它也可以接受 授权带有 BearerTokens 的 Api 请求 我已经配置并运行了 IdentityServer4 我还在
  • 这些作业之间是否存在顺序点?

    以下代码中的两个赋值之间是否存在序列点 f f x 1 1 x 2 不 没有 在这种情况下 标准确实是含糊不清的 如果你想确认这一点 gcc 有这个非常酷的选项 Wsequence point在这种情况下 它会警告您该操作可能未定义
  • 使用 x509 证书签署 json 文档或字符串

    如何使用 x509 证书签署 json 文档或字符串 public static void fund string filePath C Users VIKAS Desktop Data xml Read the file XmlDocum
  • 覆盖子类中的字段或属性

    我有一个抽象基类 我想声明一个字段或属性 该字段或属性在从该父类继承的每个类中具有不同的值 我想在基类中定义它 以便我可以在基类方法中引用它 例如覆盖 ToString 来表示 此对象的类型为 property field 我有三种方法可以
  • 如何使用 C# / .Net 将文件列表从 AWS S3 下载到我的设备?

    我希望下载存储在 S3 中的多个图像 但目前如果我只能下载一个就足够了 我有对象路径的信息 当我运行以下代码时 出现此错误 遇到错误 消息 读取对象时 访问被拒绝 我首先做一个亚马逊S3客户端基于我的密钥和访问配置的对象连接到服务器 然后创
  • cmake 将标头包含到每个源文件中

    其实我有一个简单的问题 但找不到答案 也许你可以给我指一个副本 所以 问题是 是否可以告诉 cmake 指示编译器在每个源文件的开头自动包含一些头文件 这样就不需要放置 include foo h 了 谢谢 CMake 没有针对此特定用例的
  • 混合 ExecutionContext.SuppressFlow 和任务时 AsyncLocal.Value 出现意外值

    在应用程序中 由于 AsyncLocal 的错误 意外值 我遇到了奇怪的行为 尽管我抑制了执行上下文的流程 但 AsyncLocal Value 属性有时不会在新生成的任务的执行范围内重置 下面我创建了一个最小的可重现示例来演示该问题 pr
  • 测试用例执行完成后,无论是否通过,如何将测试用例结果保存在变量中?

    我正在使用 NUNIT 在 Visual Studio 中使用 Selenium WebDriver 测试用例的代码是 我想在执行测试用例后立即在变量中记录测试用例通过或失败的情况 我怎样才能实现这一点 NUnit 假设您使用 NUnit
  • C# - OutOfMemoryException 在 JSON 文件上保存列表

    我正在尝试保存压力图的流数据 基本上我有一个压力矩阵定义为 double pressureMatrix new double e Data GetLength 0 e Data GetLength 1 基本上 我得到了其中之一pressur
  • C++ 中类级 new 删除运算符的线程安全

    我在我的一门课程中重新实现了新 删除运算符 现在我正在使我的代码成为多线程 并想了解这些运算符是否也需要线程安全 我在某处读到 Visual Studio 中默认的 new delete 运算符是线程安全的 但这对于我的类的自定义 new

随机推荐

  • jQuery css('padding') - Firefox 问题

    Firefox 至少 v19 0 2 似乎存在 jQuery 问题css http api jquery com css 函数 当你尝试获取一个元素的padding 我使用的时候没有这个问题 css padding left 但最好只写一行
  • 获取 Windows Phone 用户帐户

    我正在尝试在 Windows Phone 的 C 中获取 Windows Phone 用户帐户 live facebook twitter linkedin 所以我发现了这个 http msdn microsoft com en us li
  • Google 地图 API - 弹跳标记问题

    当选择标记时 我希望它弹起 当我单击另一个标记时 我希望第一个标记停止弹跳 然后另一个标记开始弹跳 我认为这可以通过简单地做到这一点来实现 function bindInfoWindow marker map infoWindow html
  • angular2:如何在维护重定向 URL 的同时获取 CanLoad 防护的完整路径

    我正在使用 Angular 2 4 版本和路由器版本 3 4 10 我正在尝试使用 authguard 服务处理重定向 url 当用户点击 url domain assignment 3 detail 时 如果用户未登录 则用户将重定向到
  • Rails 4:将 JSON 对象(来自 AJAX 响应)渲染到视图中

    我正在使用 Rails 4 而且对 JSON 对象还很陌生 我有一个控制器 class UsersController lt ApplicationController def select users users User all res
  • C# 两个数组的相似之处

    There must是一个更好的方法来做到这一点 我确信 Simplified code var a new List
  • 如何将 Firebase 数据库锁定到特定(电子邮件)域中的任何用户?

    我有一个使用 Firebase 数据库的小型个人 Firebase Web 应用程序 我想保护 锁定 这个应用程序给来自单个特定域的任何用户 我想通过 Google 进行身份验证 我不清楚如何将规则配置为 仅来自单个特定域的用户 例如 fo
  • 在 PostgreSQL 中聚合 (x,y) 坐标点云

    我有一个 PostgreSQL 数据库表 其简化结构如下 设备 ID varchar Pos X 整数 Pos Y 整数 基本上 该表包含设备的大量二维航路点数据 现在我想设计一个查询来减少输出中的坐标数量 它应该聚合附近的坐标 对于某个
  • 如果 Apt 包丢失,Ansible 执行任务

    如果缺少特定的 apt 软件包 我希望执行一系列任务 例如 如果未安装石墨碳 请执行以下操作 apt name debconf utils state present shell echo graphite carbon postrm re
  • Ruby 中的装饰器(从 Python 迁移)

    我今天从 Python 的角度学习 Ruby 我完全无法解决的一件事是装饰器的等效项 为了简化事情 我尝试复制一个简单的 Python 装饰器 usr bin env python import math def document f de
  • 如何在正则表达式中使用 awk 变量?

    我有一个名为domain其中包含一些域 例如 google com facebook com yahoo com 我还有另一个文件叫site其中包含一些站点 URL 和编号 例如 image google com 10 map google
  • Visual Studio:基于正则表达式的自定义代码突出显示[关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 由于我的应用程序支持某种偏执的调试级别 每个数据分配 代码中的每个步骤都写入日志目标 因此我的代码中充
  • CSS 中的禁用按钮?

    我试图获得一个无论启用还是禁用看起来都完全相同的按钮 但是每当我禁用该按钮时 它似乎都会忽略我设置的任何字体样式 在 IE 中似乎是这种情况 但在其他浏览器中则不然 那么有人知道 CSS 可以更改禁用按钮以使字体不被浮雕吗 提前致谢 克里斯
  • 在Windows上编译RInside程序[重复]

    这个问题在这里已经有答案了 可能的重复 Windows下编译RInside示例的问题 https stackoverflow com questions 5650063 problem with compiling rinside exam
  • 检测32位操作系统下处理器是否为64位

    通常 x86 64 架构提供与 x86 的兼容性 32 位 Windows 或其他操作系统 可以在 x86 64 处理器上运行 如果我错了请纠正我 我想知道 32 位 Windows 是否可以 在 C 中 知道底层处理器是否是 64 位 例
  • JavaPreparedStatement:com.microsoft.sqlserver.jdbc.SQLServerException,索引超出范围

    我正在尝试执行SQL使用 Java 进行查询PreparedStatement在 Java 7 中使用以下代码 PreparedStatement functionalCRsStatement con prepareStatement se
  • 本机代码中的 JVM 致命错误,不知道该怎么办

    我正在使用 LWJGL 在 Java 中开发游戏 除了主游戏之外 我还开发了一些基于 Swing 的应用程序 启动器 配置编辑器和地图编辑器 当我运行启动器时 我有时 大约 10 的时间 会发生致命的 JVM 崩溃 这很奇怪 我可以在几秒钟
  • 查找文件夹中名称相同但扩展名不同的文件

    我有一个 FTP 服务器 它将客户端发送 上传的文件存储在某个文件夹中 客户端将上传3个名称相同但扩展名不同的文件 例如 客户端将发送file1 ext1 file1 ext2和file1 ext3 我正在寻找一段代码 它可以帮助我找到具有
  • 如何防止 php 站点的浏览器缓存

    我有一个在云服务器中运行的 php 网站 每当我添加新文件 css js 或图像时 浏览器都会加载存储在缓存中的相同旧 js css 和图像文件 我的网站有一个文档类型和元标记 如下所示
  • C++ 命名空间建议

    我刚刚自学 C 命名空间 来自 C 背景 我真的开始认为 即使 C 比大多数其他语言做得更好 嵌套命名空间也不是其中之一 我是否正确地认为 为了声明一些嵌套名称空间 我必须执行以下操作 namespace tier1 namespace t