テンプレートの宣言と実装を分離するために、次のパターンを使用しています。
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>;
ここでの主な懸念はインスタンス化の重複です。どうすればそれらを回避できますか?