【问题标题】:Put all function that are in a header file in a namespace将头文件中的所有函数放在命名空间中
【发布时间】:2020-09-22 13:51:54
【问题描述】:

有没有办法把所有的函数都放在命名空间的头文件中,而不改变头文件本身? 例如,如果我有一个名为“funcs.h”的头文件,其中包含一些函数,有没有办法在不更改“funcs.h”的情况下将所有函数放在命名空间中?

谢谢!

【问题讨论】:

  • 有一种方法,但在写答案之前......你为什么要这样做?如果您不修改标题,您可以将其包含在命名空间内或外部,这肯定是错误和问题的来源
  • 有哪些功能?也是一个funcs.cpp?
  • 这不是一个好主意。如果您使用的是设计为在没有命名空间的情况下使用的库,那么添加命名空间是一项非常重要的更改。如果您遇到名称冲突,请咬紧牙关并重写库。从长远来看,这将比尝试围绕设计错误编写代码要简单得多。

标签: c++ namespaces header-files


【解决方案1】:

我的第一个想法是一些肮脏的 hack,但没有理由使用 hack。

假设您在全局范围内定义了一个函数(实际上我使用了一个重载集作为示例,这与它是否在标头内无关):

void foo() {}
void foo(int) {}

您可以通过using从命名空间内访问它:

namespace ns {
    using ::foo;
}

int main() {
    ns::foo();
    ns::foo(1);
}

请注意,您现在有 ns::foo::foo 都引用同一个函数(分别是一组重载)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-01
    • 1970-01-01
    • 1970-01-01
    • 2010-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-22
    相关资源
    最近更新 更多