3

鉴于:

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

我想添加<<可用于AStringand的 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*as 参数。

它似乎<<本身接受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;
}

有人可以告诉我这是正确/好的做法还是有更好的方法?欢迎任何意见!

4

2 回答 2

2

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

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

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

于 2011-07-06T10:00:57.033 回答
0

您是否考虑过将其转换为char*

std::ostream & operator<<(std::ostream &out, const BString &str)
{ 
   out.write(reinterpret_cast<char*>(str.val), sizeof(str.val));
   return out;
}
于 2011-07-06T10:00:12.810 回答