1

フォーマットされた (テキスト) およびフォーマットされていない (バイナリ) データを印刷および読み取るために使用できる自己定義のファイル ストリーム クラスを作成したいと思います。シフト演算子 (<< および >>) は既に存在し、ファイル ストリームのメンバーの書き込みと読み取りも同様ですが、シフト演算子 << のみを使用して、ストリームがバイナリ モードで開かれている場合はフォーマットされていない出力を作成したいと考えています。別の方法でフォーマットされます。

私が書いたコードは、少なくとも文字列と 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 *) &param, 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 *) &param, sizeof(param)); //binary read-in

    else 
        fstream::operator>>param; //non-binary read-in

    return *this;
}
};

問題はおそらくostream の shift operator のどこかにあるため、ostream の << および >> 演算子は char、cstring、および string でオーバーロードされません。

コードのどこを変更し、何を何に置き換える必要があるか教えていただけますか?

また、アドバイスを提供し、私の目的に適した方法を示していただければ幸いです。そのため、回避策も受け入れられます-それらがエレガントであれば。

4

1 に答える 1