【问题标题】:Include header outside of namespace在命名空间之外包含标头
【发布时间】: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++


【解决方案1】:

是的,这很有可能,尽管您必须检查是否在使用该头文件中的代码位时定义了#define bar。我还建议您在包含标头之前关闭命名空间。

【讨论】:

  • 当有人问“我能做 X 吗”时,他们并不是在寻找字面上是/否的答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-11-30
  • 2011-03-01
  • 1970-01-01
相关资源
最近更新 更多