現在、この問題をいくつかの方法で分析しようとしていますが、わかりません。
私のユースケースは - テンプレートクラスがあり、特定の型に特定の実装を提供し、残りの一般的な実装を維持したいと考えています。
コードは次のとおりです。
template< typename T >
struct SomeClass
{
void foo();
};
template< typename T >
void SomeClass< T >::foo()
{
printf( "generic impl." );
}
template<>
void SomeClass< char >::foo()
{
printf( "char-specific impl." );
}
コード全体が、それを使用しているコードの隣にある CPP ファイルにある限り、すべてが正常に機能します。
コードを専用ファイルに移動するとすぐに、次のようになります。
SomeClass.h
#ifdef _SOME_CLASS_H
template< typename T >
struct SomeClass
{
void foo();
};
template< typename T >
void SomeClass< T >::foo()
{
printf( "generic impl." );
}
#endif
SomeClass.cpp
#include "SomeClass.h"
template<>
void SomeClass< char >::foo()
{
printf( "char-specific impl." );
}
void SomeClass< char >::foo() が既に実装されているというリンカ エラーが表示されます。
理由はありますか?