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

发布于 2024-10-11 14:46:46 字数 370 浏览 6 评论 0原文

我有一些不需要在全局命名空间中的帮助程序类,因此我想将它们放在自己的命名空间中。例如:

// 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?

I have some helper classes that I don't want in the global namespace, so I want to put them in their own namespace. For example:

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

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

// Widget.cpp
using namespace MyHelpers;

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

In in the .cpp file, Helper can be referenced directly, while in the .h file, it is referenced using the namespace. Is it possible to have the header file lose the "MyHelpers::" boilerplate, while still reserving MyHelpers from the global namespace?

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

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

发布评论

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

评论(2

听风吹 2024-10-18 14:46:46

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

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

If you have many of these, create a type shortcut inside the using class declaration:

class Foo {
    ...
    typedef MyHelpers::Helper Helper;
    ...
    void bar(Helper *helper);
    ...
};
£冰雨忧蓝° 2024-10-18 14:46:46

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

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

然后:

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

One alternative could be to nest the helper classes inside the main class.
Something like this:

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

Then:

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