我使用以下模式将模板声明和实现分开:
decl.h(声明)
template <typename T>
struct Foo
{
void DoIt();
}
impl.cpp(实现)
template <typename T>
void Foo<T>::DoIt() { // impl code
};
template class Foo<int>;
template class Foo<float>;
现在我想给 Foo 添加一个新方法,但是 impl.cpp 文件已经很大了,所以我想把它移到一个单独的文件 impl2.cpp 中;
decl.h(声明)
template <typename T>
struct Foo
{
void DoIt();
void RemoveIt();
}
impl.cpp(实现)
template <typename T>
void Foo<T>::DoIt() { // impl code
};
template class Foo<int>;
template class Foo<float>;
impl2.cpp(实现)
template <typename T>
void Foo<T>::RemoveIt() { // impl code
};
template class Foo<int>;
template class Foo<float>;
这里主要关注的是重复的实例化,我该如何避免这些?