2012-03-30 74 views
-1

C++ 11提供了extern模板声明,以防止在当前编译单元中实例化模板类的实例。是否有任何方法可以对在头文件中声明的非模板化类执行相同的操作,而无需修改声明它的头文件?我可以阻止实例化非模板类吗?

动机是减少由boost引起的对象文件膨胀,它在头文件中仅定义了大量非模板化类,即使在内联不能应用的情况下也是如此。

+1

为什么你关心目标文件大小?链接期间,链接器应该删除任何相同的符号。 – ildjarn 2012-03-30 18:32:58

+1

@ildjarn:多个相同符号的编译可能会在大型项目中造成巨大的编译时间 – Paranaix 2012-03-30 18:45:56

+2

@Paranaix:预编译头文件处理此问题,而不需要像这个问题所要求的任何破解。 – 2012-03-30 18:49:24

回答

0

对于大多数意图和目的,这里没有任何技巧。除非预编译头文件是一个窍门?做腿部的工作来移除头文件的依赖是我会推荐的。

我的尝试解决这类问题的经验是,它通常是您的项目失控的内库依赖项的症状。一切都取决于其他事情,所以很难不包含所有内容。所以当你包含错误的头部时,它会影响一切。

可视化您的依赖关系,如果它不是DAG,那么这是您的首要关注点。

之后,应该更容易识别导致问题的特定标题。 pimpl idiom和predeclarations是纠正细节的好工具。

我还没有一致的问题提升,虽然他们的一些库可能是麻烦制造者。 boost::multi_index是我能想到的唯一一个。

相关问题