4

(C++ではMS Visual Studio 2008 SP1を使用しています)、クラスメンバ関数の明示的な特殊化を使用する必要がありましたが、コンパイルできませんでした。 「ファイル::演算子< <は」:メンバ関数のテンプレート特殊化

エラーC2910取得明示的にオペレータ< <のあなたの明示的な特殊化宣言のパラメータリストと一致しませんでした

class File 
{ 
    std::ofstream mOutPutFile; 
public: 
    template<typename T> 
    File& operator<<(T const& data); 
}; 


template<typename T> 
File& File::operator<< (T const& data) 
{ 
    mOutPutFile << preprosesor(data); 
    return *this; 
} 

template< > 
File& File::operator<< <> (std::ofstream& out) 
{ 
    mOutPutFile << out; 
    return *this; 
} 
+0

http://stackoverflow.com/search?q=%5BC%2B%2B%5D+specialize+member+function –

+0

あなたはWindowsで作業しています。 MSVCのバージョンが適切かもしれません。あなたがそのような情報を与えると、人々はより良​​い答えを出すのに役立ちます。 –

+1

[Function template specialization format]の複製が可能です(http://stackoverflow.com/questions/937744/function-template-specialization-format) –

答えて

5

を専門にすることはできませんが。 T const& datastd::ofstream& out。 これはMSVC10でコンパイルされます。

注意事項constは、functionパラメータの前に追加されています。

+0

ここのofstreamはrvalueです。これは、<<の使用の右側に現れます。 operator(グローバル)を定義すると、ostreamは実際にコンパイルするには非constでなければなりません。それはここで問題ではありません。 – emsr

+0

これは、ここに書き込まれるstd :: ofstream&outではなく、mOutPutFileです。 – Andrey

関連する問題