g++ 4.4.5
我有一个扩展类 std::ofstream 以添加一些功能的类。
MyStream& MyStream::operator<<(const bool& val) {
if(this->pos == 8) {
this->pos = 0;
ofstream::operator<<(this->curbyte); //call the parent method
}
curbyte = curbyte + (val << pos++);
return *(this);
}
这基本上允许您将单个位写入布尔值,然后它将使用父 << 方法写入每组 8 个。我必须在这里使用这种调用语法,因为我正在调用基本方法,但在我使用此类的实际主方法中,我尝试调用以下行:
bout << (unsigned char) 255u;
我想调用已经为 ofstream 和 unsigned char 定义的 << 方法,但它给了我一个很长的模棱两可的重载错误,列出了已经为 ofstream (char、unsigned char、signed char) 定义的所有与 char 相关的候选对象和我自己的 bool 方法,即使我明确地转换为 char。但是我确实设法让它与以下内容一起工作:
bout.operator<<((unsigned char) 255u);
这一定与 g++ 如何进行隐式转换有关(我的猜测是在第一种情况下我的用户定义转换之后还有一个可能的转换,这使得函数调用语法避免了模棱两可)。有谁知道为什么会发生这种情况,或者是否有更好的语法可以避免错误?