【问题标题】:using directive in header file在头文件中使用指令
【发布时间】:2021-10-19 17:31:11
【问题描述】:

我有一个需要转换为模板类的类。为此,我将实现从 class.cpp 移动到 class-in.h,然后将其包含在 class.h 的末尾。

该实现有几个using ... 指令以及一个gflag DEFINE_bool。我需要在 class-inl.h 文件中使用它们,但我被告知不应将它们放在头文件中。 class-inl.h 是一个头文件,但它永远不会作为常规头文件包含在内。

有什么方法可以摆脱头文件中的 using/gflag 吗?我可以将 gflag, using statements 放在 class.cpp 中吗?

编辑:我的意思是使用声明示例using std::cout

【问题讨论】:

  • “我在头文件中看到了我看不到的警告。”edit您的问题包括您要解决的警告。跨度>
  • 删除了关于警告的部分
  • "我被告知不应将它们放在头文件中" - 由谁告诉? “有什么方法可以摆脱在头文件中使用 / gflag 吗?” - 查看您遇到问题的代码的 minimal reproducible example 真的很有帮助。然后有人可以给你一个更明确的答案,解释如何使它工作
  • 您指的是using-directivesusing-declarations还是type aliases?在头文件中只应避免前两个,即使它们以“泄漏”到头文件之外的方式使用。

标签: c++ c++11 templates


【解决方案1】:

如果usings 仅用于实现,我的建议是不要将它们放入头文件中。它们不必要地泄漏符号和实现细节。如果您定义using my_shortcut_for_long_type=....,那么当您决定更改它时,一定会有人开始使用它并且代码中断。

std::cout 而不是cout 不会杀了你。如果要缩短长类型,请将 using 放入例如impl 命名空间; .cpps 中的静态函数也是如此。如果您决定在标题中也定义它们,请不要忘记标记它们inlineusing 也可以在函数范围内定义,也可以使用。

绝对不要将using namespace std; 或任何其他命名空间放入头文件中,除非这是该头文件的目的。

如果可能,也不要使用宏。

【讨论】:

    【解决方案2】:

    通常可以将using 放在头文件中。

    有没有办法摆脱在头文件中使用 ...?

    是的:不要依赖头部中的声明,那么你就不需要声明它。但正如我所说,通常不需要在标题中删除 using

    有什么办法可以去掉头文件中的 ... gflag 吗?

    改为在源文件中定义它。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-20
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      • 2021-04-29
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多