using 声明应该有多窄?

2024-01-17

我有这个小班widget使用一个std::string。它在很多地方使用它,通常与std::vector。所以你可以看到,类型名变得非常长而且烦人。

我想利用using关键字,即using std::string;

问题是,最好放置在哪里?

// widget.h file
#ifndef WIDGET
#define WIDGET

// (1)
namespace example {
    // (2)

    namespace nested {
        // (3)

        class widget {  
        public:
            // (4)
            ...
        private:
            // (5)
            std::string name_;
            ...
        };

    }
}

#endif

我的问题是:

  1. 如果我把它放在(1)那么每个人包括widget.h他们的范围会被污染string?
  2. 在一些地方(2) and (3),与 1 中的情况相同,只是名称空间example and example::nested将在第二个文件中被污染,其中包括widget.h?
  3. 在一些地方(4) and (5),声明是相当孤立的,但是它在实现(Cpp)文件和继承类中是否可见?

提前致谢!


不要执行(1) 中的操作。
每个人都会咒骂你的名字一千年。
作为您班级的用户,我不介意您污染自己的名称空间。但如果你污染了我的任何命名空间(包括全局命名空间),我会感到不安,因为这会影响我的代码的编译方式。为什么“使用命名空间 std”被认为是不好的做法? https://stackoverflow.com/q/1452721/14065

您不能在 (4) 或 (5) 处使用它。

因为我(个人)希望将其尽可能靠近使用点(以防止污染)。
你能做的最好的事情就是(3)。

但我什至不会那样做。我对标准中的任何事情都很明确。但我会 typedef 我的容器类型。

private: //(so at 5) Don't need to expose internal details of your class.
    typedef std::vector<std::string>   MyCont;

这是一种更好的技术,因为您只需要在一个地方进行更改,并且更改将会级联。

// Sub typedefs now will no longer need to change if you change
// The type of container. Just change the container typedef and
// now the iterators are automatically correct.
public: //(so at 4)  Iterators are public (and not exposing the implementation).
    typedef MyCont::iterator       iterator;
    typedef MyCont::const_iterator const_iterator;
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

using 声明应该有多窄? 的相关文章

随机推荐

  • 如何使用可旁加载的证书创建 UWP 应用

    我正在尝试创建一个可以侧载到其他电脑上的 UWP 应用程序 我的主要问题是 我是否需要来自可信来源的证书来签署我的应用程序 经过大量研究后 我了解到您可以通过应用程序旁加载 安装 UWP 应用程序应用程序安装程序 https www mic
  • 中介者模式与创建

    我的演示文稿中有几个需要相互交互的 小部件 但交互已经变得足够复杂 需要一个新对象来处理交互 在尝试通过中介者作为该对象进行工作时 我对如何有效地构建参与者感到困惑 中介者必须了解小部件 而小部件也必须了解中介者 使用下面的玩具类 有人可以
  • jquery 日期时间选择器设置 minDate 动态

    我正在使用trentrichardson com 的日期时间选择器 我有一个带有两个输入字段的表单 from and to我希望能够动态地将 minDate 设置为我的 to 字段 等于我的 from 字段的值 我知道我应该使用 befor
  • 从 Unix 时间戳转换为 Groovy 中的日期

    我有一个 unix 时间戳中的日期 我想将其转换为人类可读的 def dateUnix 1486146877214 Date dateObj new Date long dateUnix 1000 def cleanDate new Sim
  • 加载了错误的 Java 资源包

    在我的应用程序中 我使用 java 资源包来翻译其标签 我目前有两个文件 带有英语标签的 resources properties 默认语言 带有法语标签的 resources fr properties 然后 我使用以下命令加载捆绑包属性
  • XSLT - 识别具有相同属性值模式的连续节点

    我有这样的xml section p aa p p bb p p cc p p dd p p ee p p ff p p gg p p hh p p ii p p jj p p xx p p p section
  • 如何从 Java 中的内部 Thread Runnable 方法获取返回值?

    我该如何分配Status with CallMe using isFinish 返回值 true 吗 public static boolean isFinish boolean Status false new Thread new Ru
  • Solr、特殊字符和拉丁文到西里尔文字符转换

    我正在尝试使用 Solr 或 Lucene 设置一个搜索引擎 它可以包含带有特殊字符的拉丁语文本 特殊字符包括 或 作为示例 或西里尔字符 示例包括 或 和 无论如何 我正在尝试找到一个解决方案 让我可以搜索包含这些字符的单词 但对于键盘上
  • 为什么 Angular2(点击)事件没有在

    我发现 Angular2 有一个奇怪的行为 click 没有对此进行射击 div test div 但它在这里有效 div test div 谁能解释这种行为 为什么需要设置位置样式才能 点击 触发 我错过了什么吗 你的代码片段看起来一切都
  • 如何在命令栏中水平对齐AppBarButton

    我想调整我的单曲AppBarButton向右CommandBar in a Page BottomBar 在设计上它展示了app bar button在右侧 但在模拟器中 按钮始终位于中心 有没有办法对齐AppBarButton in a
  • 弹出窗口内的下拉列表(按下按钮时出现)

    目前我正在尝试创建一个按钮 该按钮创建一个弹出框 该弹出框又具有一个下拉列表 例如here http www w3schools com tags tag select asp 但是 我无法弄清楚如何将下拉列表放入弹出窗口中 有人可以帮忙吗
  • 如何反转 RDD.takeOrdered() 的顺序?

    Spark 中 RDD 的 takeOrdered 方法反转顺序的语法是什么 为了奖励积分 Spark 中 RDD 的自定义排序语法是什么 相反的顺序 val seq Seq 3 9 2 3 5 4 val rdd sc paralleli
  • 如何在 Nuxt(或 Vue)中将文本文件中的内容作为字符串读取?

    我想读取我导入的文本文件的内容 vue文件如import ToS from static terms of service txt 我想以字符串形式访问内容 我该怎么做 VUE CLI 3 首先安装原始加载程序npm install raw
  • 为什么 std::Optional 的强制转换运算符会被忽略?

    这段代码 include
  • 在 VirtualBox 中将文件夹从主机 Mac OS 共享到来宾 Linux 系统 [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 如何在 Virtual Box 中的主机 Mac 和来宾操作系统 Ubuntu 之间共享文件夹 您需要最新版本的 VirtualBox 4
  • 如何在dojo中查询对象类型?

    我们可以使用 dojo query 来获取基于 CSS 选择器的某些元素 但是我们如何查询对象类型呢 比如获取页面上所有的TextBox元素然后使用dojo connect绑定一个函数 这并不完全支持 但据我所知 有两种方法可以做到这一点
  • 从 /assets/filename 公钥加载 X509Certificate 不正确

    我在 Windows 上用 java 运行了以下代码 它的工作方式就像一个魅力 我使用的证书带有通过 OpenSSL 生成的 2048 RSA 密钥 需要注意的重要部分是 mServerPublicKey cert getPublicKey
  • 比较 2 个网址的最佳方法[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想比较 2 个网址 最好的方法是什么 状况 1 它应该排除http方案 2 foo com a b 和 foo com a 应该匹配 您
  • 设置 proxy.socks.port selenium

    我习惯这样设置http端口 profile set preference network proxy http port PORTNUMBER 那行得通 但现在我需要连接袜子代理并设置端口 但它不起作用 profile set prefer
  • using 声明应该有多窄?

    我有这个小班widget使用一个std string 它在很多地方使用它 通常与std vector 所以你可以看到 类型名变得非常长而且烦人 我想利用using关键字 即using std string 问题是 最好放置在哪里 widge