フォーマットされた (テキスト) およびフォーマットされていない (バイナリ) データを印刷および読み取るために使用できる自己定義のファイル ストリーム クラスを作成したいと思います。シフト演算子 (<< および >>) は既に存在し、ファイル ストリームのメンバーの書き込みと読み取りも同様ですが、シフト演算子 << のみを使用して、ストリームがバイナリ モードで開かれている場合はフォーマットされていない出力を作成したいと考えています。別の方法でフォーマットされます。
私が書いたコードは、少なくとも文字列と chars( と cstrings) では正しく動作しません:
class mixstream:public fstream {
public:
//some constructors and public functions in the code
template <class T> mixstream& operator<< (T&& param)
{
if (openmode() & ios_base::binary)
write((char *) ¶m, sizeof(param)); //binary write-out
else
fstream::operator<<(param); //non-binary write out
return *this;
}
template <class T> mixstream& operator>> (T&& param)
{
if (openmode() & ios_base::binary)
read((char *) ¶m, sizeof(param)); //binary read-in
else
fstream::operator>>param; //non-binary read-in
return *this;
}
};
問題はおそらくostream の shift operator のどこかにあるため、ostream の << および >> 演算子は char、cstring、および string でオーバーロードされません。
コードのどこを変更し、何を何に置き換える必要があるか教えていただけますか?
また、アドバイスを提供し、私の目的に適した方法を示していただければ幸いです。そのため、回避策も受け入れられます-それらがエレガントであれば。