将所有函数放在名称空间的头文件中

问题描述

有什么方法可以将所有内容全部放入命名空间的文件中的函数,而无需更改头本身? 例如,如果我有一个名为“ funcs.h”的头文件,该头文件中包含一些功能,是否可以在不更改“ funcs.h”的情况下将所有功能放入命名空间?

谢谢!

解决方法

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

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

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

您可以通过using从名称空间中对其进行访问:

namespace ns {
    using ::foo;
}

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

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