1

我想创建一个自定义文件流类,我可以用它来打印和读取格式化(文本)和未格式化(二进制)数据。移位运算符(<< 和 >>)已经存在,以及文件流的写入和读取成员,但我想仅使用移位运算符 <<,如果流以二进制模式打开,则创建未格式化的输出,并且以其他方式格式化。

我写的代码至少对于字符串和字符(和 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 运算符附近,因此 ostream 的 << 和 >> 运算符不会被 chars、cstrings 和字符串重载。

你能指出我应该在哪里修改我的代码以及我应该替换什么吗?

如果您提供建议并为我的目的展示良好的做法,我也将不胜感激,因此也可以接受变通方法 - 如果它们很优雅。

4

1 回答 1

0
于 2013-07-16T22:57:01.037 回答