我正在开发一个库,其中我们的许多核心对象都是模板,其中一个特定的实例显示在项目中的大多数文件中,以指向该模板实例化的智能指针的形式出现.我在单个源文件中显式实例化这些模板.我们最近切换到C++ 11,我正在尝试使用新的
extern template class MyTemplate<double>;
Run Code Online (Sandbox Code Playgroud)
加快编译速度.我的第一个问题是我是否使用了智能指针
MyTemplate<double>
Run Code Online (Sandbox Code Playgroud)
隐式实例化模板并需要文件顶部的"extern模板.."以避免重复实例化.
我的第二个问题是,是否有一些替代方案可以添加所有这些
extern template class MyTemplate<double>;
Run Code Online (Sandbox Code Playgroud)
到每个源文件.对于我定义的每个模板,只需稍微繁琐地点击智能指针的每个实例,并确保我在该文件中有正确的"外部模板"行.我还可以看到为代码的未来开发人员执行此约定有点困难,因为他们可能会添加模板实例化并忘记相应的extern模板行,尤其是因为不会生成错误.