ostream运算符重载在C ++中的unsigned char

时间:2011-07-06 09:55:23

标签: c++ operator-overloading ostream unsigned-char

假设:

typedef struct { char val[SOME_FIXED_SIZE]; } AString;
typedef struct { unsigned char val[SOME_FIXED_SIZE]; } BString;

我想添加<<AString可用的ostream运算符BString

std::ostream & operator<<(std::ostream &out, const AString &str)
{ 
   out.write(str.val, SOME_FIXED_SIZE);
   return out;
}

如果我对BString执行相同的操作,编译器会抱怨invalid conversion from 'const unsigned char*' to 'const char*'ostream.write没有const unsigned char*作为参数。

似乎<<本身接受const unsigned char,所以我尝试这样的事情

std::ostream & operator<<(std::ostream &out, const BString &str)
{ 
    for (int i=0; i<SOME_FIXED_SIZE; i++)
    {
        out<<str.val[i];
    }
    return out;
}

有人能告诉我这是对的/好的做法还是有更好的方法? 欢迎任何评论!

2 个答案:

答案 0 :(得分:2)

最简单,最干净的解决方案是创建std::string,例如:

out << std::string(str.val, str.val + sizeof(str.val));

然而,问题是:您想要格式化还是未格式化的输出? 对于未格式化的输出,尽管它很丑陋,但我只是使用了 reinterpret_cast

答案 1 :(得分:0)

您是否考虑过将其投放到char*

std::ostream & operator<<(std::ostream &out, const BString &str)
{ 
   out.write(reinterpret_cast<char*>(str.val), sizeof(str.val));
   return out;
}