【发布时间】:2019-03-14 07:18:54
【问题描述】:
我有几个复杂的头文件,我将它们包含在命名空间中。在头文件的中间包含一些头文件。有没有一种简单的方法可以将包含的标头包含在全局范围内?即在下面的代码中,我可以指定要包含在全局命名空间中的某个标头吗?
#pragma once
namespace foo
{
// lots of code;
// depending on lots of conditions defined above
#define bar
#ifdef bar
#include <someheader> // would be available only when bar is set/
#endif
//
【问题讨论】:
-
在
#include之前关闭namespace foo,然后再重新打开? IIRC,与类不同,您可以添加到命名空间。 (您必须能够为std命名空间扩展命名空间才能工作。)。但是你可能想看看你是如何模块化你的代码的。听起来很乱。 -
我不得不质疑为什么这段代码首先在命名空间中。
#define、#ifdef等根本不关心命名空间,所以你可以在foo之外进行所有预处理器的乐趣在 之外,根本不用担心命名空间问题。 -
@JonathanLeffler - 我试图避免这种情况;稍长的努力。你是对的,但是 #define 依赖于其他 #defines 并且分布在文件中,并且使用命名空间收集所有外部代码也需要仔细/更长的编码。
标签: c++