ファイルalpha.hがあるとします:
class Alpha {
public:
template<typename T> void foo();
};
template<> void Alpha::foo<int>() {}
template<> void Alpha::foo<float>() {}
複数の cpp ファイルに alpha.h をインクルードし、GCC 4.4 でコンパイルすると、複数のオブジェクト ファイルfoo<int>
にまたがる複数の定義があるとエラーが表示されます。foo<float>
私には理にかなっているので、最後の 2 行を次のように変更します。
template<> extern void Alpha::foo<int>() {}
template<> extern void Alpha::foo<float>() {}
しかし、GCCは次のように述べています。
明示的なテンプレートの特殊化は、ストレージ クラスを持つことはできません
わかりました...どうすればこれを正しく行うことができますか? そもそも私がやろうとしていることを C++ が許可していないのではないかと心配しています。その場合、同じことを達成する良いイディオムはありますか?