テンプレート化されたメソッドとその特殊化をエクスポートする必要があります。現在ソースファイルにあり、正常に動作します。コードをヘッダーに移動しようとしています。残念ながら、それを行うと、スペシャライゼーションは機能しなくなります。
これは物事の現在の状態です:
struct klass
{
template<typename T> method(T&);
template<typename T> method(std::vector<T>&);
};
template<typename T>
void klass::method(T& value)
{
}
template<typename T>
void klass::method(std::vector<T>& value)
{
}
template<>
void klass::method<std::string>(std::string& value)
{
}
これが機能するはずの方法はかなり明確だと思います。
私が間違っていなければ、すべてのテンプレートと部分的な特殊化をヘッダーに直接エクスポートできるはずです。
非部分的な特殊化をヘッダーに含めることはできず、ソース ファイルにとどまる必要があります。ただし、インスタンス化されているため、 klass::method を使用するたびに特殊化が既に使用されているため、重要ではありません。
もちろん、これは起こりません。ヘッダーのテンプレートと部分的な特殊化を移動すると、ソース ファイルに残っていた非部分的な特殊化は完全に無視されます。
これをどのように行う必要があるか説明してください。特殊化をヘッダー内に移動する必要がありますか?また、その方法は?
私はgccを使用しています。msvc との互換性について何か知っておくべきことがあれば、私も興味があります。