使用“使用”表示“使用”。在头文件中

发布于 2024-11-04 18:45:47 字数 311 浏览 4 评论 0原文

我明白,我不应该在头文件中使用它:

using namespace foo;

因为它为使用我的头文件的任何人带来了全局范围内的名称空间 foo 。

如果我在自己的命名空间中执行此操作,可以防止这种情况发生吗?例如这样:

namespace my_lib
{
    using namespace foo;

    // my stuff
    // ...
}

现在 using 命名空间 foo 应该被限制在命名空间 my_lib 的范围内,对吗?

I understood, that I should not use this in a header file:

using namespace foo;

Because it brings the namespace foo in the global scope for anyone who uses my header file.

Can I prevent this from happening, if I do it in my own namespace? For example like this:

namespace my_lib
{
    using namespace foo;

    // my stuff
    // ...
}

Now the using namespace foo should be restricted to the scope of the namespace my_lib, right?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

情定在深秋 2024-11-11 18:45:47

是的。这比在全局级别使用 using namespace foo 更好。

如果您使用 foo::name 语法,效果会更好。

<块引用>

现在 using 命名空间 foo 应该被限制在命名空间 my_lib 的范围内,对吧?

是的。它将命名空间 foo 中的所有名称引入命名空间 my_lib 中,这可能会导致 my_lib 中的名称冲突。这就是为什么 foo::name 是最可取的方法。

Yes. That is better than using using namespace foo at global level.

Yet better would be if you use foo::name syntax.

Now the using namespace foo should be restricted to the scope of the namespace my_lib, right?

Yes. It brings all the names from the namespace foo in the namespace my_lib which might cause name collisions in my_lib. That is why foo::name is the most preferrable approach.

情痴 2024-11-11 18:45:47

是的,如果你这样做,那么它只会将 foo 中的所有名称带入 my_lib 中——正如其他人指出的那样,这可能是理想的,也可能不是理想的。

除了其他人所说的之外,我还观察到的一件事是,您可以使用“命名空间内的 using 指令”的想法作为模拟仅限于类范围的 using 指令的方法。请注意,这是非法的:

class C
{
  using namespace boost; // for example

  // ...
};

但您可以这样做:

namespace C_Namespace {
  using namespace boost;

  class C
  {
  };
}

using C_Namespace::C; // bring C itself back into the global namespace

只是认为如果您真正想要的是能够定义某些内容(例如类)而无需一直编写特定的名称空间前缀,您可能会发现它很有用。

Yes, if you do that then it just brings all the names from foo into my_lib -- which, as others have pointed out, may or may not be desirable.

One thing I would observe in addition to what others have said is that you can use the 'using directive within a namespace' idea as a way of simulating a using directive that is restricted to class scope. Note that this is illegal:

class C
{
  using namespace boost; // for example

  // ...
};

But you can do this instead:

namespace C_Namespace {
  using namespace boost;

  class C
  {
  };
}

using C_Namespace::C; // bring C itself back into the global namespace

Just thought you might find it useful if what you really want is to be able to define something (like a class) without writing a particular namespace prefix the whole time.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文