我可以阻止非模板类被实例化吗

  • 本文关键字:实例化 我可以 c++ c++11
  • 更新时间 :
  • 英文 :


C++11提供了外部模板声明,以防止在当前编译单元中实例化模板类的实例。有没有任何方法可以对头文件中声明的非模板化类执行同样的操作,而不修改声明它的头文件?

其动机是减少boost导致的对象文件膨胀,boost只在头中定义了大量的非模板化类,即使在不能应用内联的地方也是如此。

对于大多数意图和目的,实际上没有任何技巧。除非预编译头是一个技巧?我建议您做一些将依赖项从标头中移出的辅助工作。

我尝试修复这类问题的经验是,这通常是您的项目中的库依赖性失控的症状。一切都取决于其他一切,所以很难不把它们都包括在内。因此,当您包含错误的标头时,它会影响所有内容。

可视化您的依赖关系,如果它不是DAG,那么这就是您首先关心的问题。

之后,应该更容易识别导致问题的特定标头。皮条成语和预先声明是纠正细节的好工具。

我在boost方面并没有遇到过持续的问题,尽管他们的一些图书馆可能会制造麻烦。boost::multi_index是我唯一能想到的。

最新更新