是否可以避免头文件中的命名空间样板文件?

时间:2011-01-10 19:52:09

标签: c++ namespaces boilerplate

我在全局命名空间中有一些我不想要的辅助类,所以我想将它们放在自己的命名空间中。例如:

// Widget.h
namespace MyHelpers {
    class Helper { ... };
}

class Foo {
    void bar(MyHelpers::Helper *helper);
}

// Widget.cpp
using namespace MyHelpers;

Foo::bar(Helper *helper) { ... }

在.cpp文件中,可以直接引用Helper,而在.h文件中,可以使用命名空间引用它。是否可以让头文件丢失“MyHelpers ::”样板,同时仍然从全局命名空间中保留MyHelpers?

2 个答案:

答案 0 :(得分:4)

如果您有许多这些,请在using类声明中创建一个类型快捷方式:

class Foo {
    ...
    typedef MyHelpers::Helper Helper;
    ...
    void bar(Helper *helper);
    ...
};

答案 1 :(得分:0)

一种替代方法是将辅助类嵌套在主类中。 像这样:

class Foo {
public:
    class Helper { ... };
    void bar(Helper *helper);
}

然后:

Foo foo;
Foo::Helper helper;
foo.bar(&helper);