命名空间别名作用域问题

7

我有一个头文件,想在定义类时使用命名空间别名。但是我不希望将这个别名暴露给包含该头文件的任何内容。

// foo.h
namespace qux = boost::std::bar::baz::qux; // ! exposed to the world
class foo
{
    // can't put a namespace alias here

    // stuff using qux::
};

如何为类声明别名命名空间而不使其泄漏到其他地方?

1个回答

15
namespace MyClassSpace
{
namespace qux = boost::std::bar::baz::qux;

class foo
{
  // use qux::
};

}

using MyClassSpace::foo; // lift 'foo' into the enclosing namespace

这也是大多数Boost库的做法,将它们的所有内容放在一个单独的命名空间中,并将重要的标识符提升到boost命名空间中。


@Kerrek:多巧合啊,我刚好达到了声望上限,需要等待重置! :) - Xeo
混蛋,我正在拼命地尝试在接下来的两个小时内完成我的工作;-) - Kerrek SB
@Kerrek:你一天内获得了太多的被接受答案...不管怎样,少了20个声望,是吧?那就变成10个。 :P - Xeo
呵呵,好的,谢谢!大部分答案都是历史性的,你知道,那种日子。但今天似乎很难得到赞成票... :-) - Kerrek SB
非常出色 - 功能与广告描述一致。事实上,它甚至比我预期的做得更好。我可以使用 using 指令来调用 foo,但不能调用其他东西,如 foohelper。(虽然如果我一开始就经常使用命名空间,我已经可以达到相同的效果了)。 - wxffles
@wxffles:是的,这样的 foohelper 应该放在 detail 命名空间中。 :) - Xeo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接