我想創建一個自定義文件流類,我可以用它來打印和讀取格式化(文本)和無格式(二進制)數據。移位運算符(< <和>>)已經存在,以及文件流的寫入和讀取成員,但是我只想使用移位運算符< <,並且在以二進制模式打開流時創建未格式化的輸出,以及否則格式化。重載二進制移位運算符的第一個參數
我寫不至少字符串和字符(和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's shift operator,這樣的ostream的< <和>>運營商都不會超載與chars,cstrings和字符串。
你能指出我應該在哪裏修改我的代碼,我應該替換什麼?
如果您提供建議並展示我的目標的良好實踐,我也很感激,所以也接受解決方法 - 如果它們很優雅。
參數'(T && param)'是否暗示<<插入操作符將對象向右? – thb
@thb是的。它會。 T &&是移動語義。 –