我想创建一个自定义文件流类,我可以用它来打印和读取格式化(文本)和未格式化(二进制)数据。移位运算符(<< 和 >>)已经存在,以及文件流的写入和读取成员,但我想仅使用移位运算符 <<,如果流以二进制模式打开,则创建未格式化的输出,并且以其他方式格式化。
我写的代码至少对于字符串和字符(和 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 运算符附近,因此 ostream 的 << 和 >> 运算符不会被 chars、cstrings 和字符串重载。
你能指出我应该在哪里修改我的代码以及我应该替换什么吗?
如果您提供建议并为我的目的展示良好的做法,我也将不胜感激,因此也可以接受变通方法 - 如果它们很优雅。