玩具示例以更好地解释我的问题:
我有我的库,它有我的自定义结构,例如StructProgrammer
和我的templateProgrammer.hpp
文件:
template <typename T> TemplateProgrammer {
};
我知道90%的时间,人们会将模板类用作:
TemplateProgrammer<StructProgrammer>
但是,我们希望人们也可以将我的模板与自己的自定义结构一起使用,例如
TemplateProgrammer<StructUser>
由于它是一个模板,这不是问题。但是用户需要花费大量时间来编译整个程序,因为每次他更改自己的TemplateProgrammer
时都必须编译这个重main.cpp
类。因此,一个可能的解决方案是创建templateProgrammer.cpp
,并在那里实现代码并初始化类:
template class TemplateProgrammer<StructUser>;
然而,这会使用户无法为自己的StructUser
编译此函数:
TemplateProgrammer<StructUser>
所以我想要的是为我的TemplateProgrammer<StructProgrammer>
添加* .cpp代码,例如对于大多数用户来说,编译速度很快,同时保持专业用户使用自己的结构的可能性(对于自定义结构,我不在乎编译是否需要时间,因为这是不可避免的。)
重点是,这可能吗?我的库的模板是否可以针对特定类进行预编译,同时可以保留为新类编译的可能性吗?如果是这样,怎么样?
否则,最好的方法是什么?