【发布时间】:2018-05-04 13:32:31
【问题描述】:
由于在头文件中实现了一个模板类,我必须在头文件中包含在该类的实现中使用的其他包含。
因此,每次我包含我的模板类时,都会带来所有其他的包含等等。
这可能会导致包容性的过度传播,甚至对于上下文而言是不必要的。
那么处理这个问题的最佳方法是什么?
编辑:因为我没有明确提到它,我不是在谈论前向声明可以像在正常的 .h/.cpp 分离中那样解决它的情况,但是当您必须包含标题时,并且由于您没有 cpp,您必须在 .h 中使用它
编辑 2:假设我的模板类有一个函数,该函数依赖于第三个类库。使用我的模板类的每个类现在都具有相同的依赖关系,或者可以访问我都不想访问的那个标题。有没有办法避免这种情况?
【问题讨论】:
-
转发声明可能......但如果人们总是需要包含标题以便 XYZ 能够使用您的模板;然后将其包含在标题中。
-
我不明白你为什么认为这是一个问题。如果声明模板的标头包含不必要的包含,则只需删除它们,如果它们是必要的,那么......那么它们是必要的
-
嗯,这是他们试图用 Modules for C++20 解决的模板的缺点......就是这样,继续吧。
-
关于我能想到的唯一解决方案是粒度。如果您的模板功能只有一部分依赖于另一个标题,请拆分模板,以便不需要额外功能的用户不必包含它。当然,可能并不总是可行的。
-
@hyde 一个宏地狱更不可取
标签: c++ header-files template-classes