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

时间:2012-03-30 18:23:26

标签: c++ c++11

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

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

1 个答案:

答案 0 :(得分:0)

对于大多数意图和目的,实际上没有任何技巧。除非预编译头是一个技巧?正如我所推荐的那样,做腿部工作以将依赖项移出标题。

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

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

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

虽然他们的一些图书馆可能是麻烦制造者,但我并没有一直存在增强问题。 boost::multi_index是我唯一可以随意思考的问题。