假设:
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;
}
有人能告诉我这是对的/好的做法还是有更好的方法? 欢迎任何评论!
答案 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;
}