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) および独自の bool メソッドに対して既に定義されているすべての char 関連の候補をリストする、長くあいまいなオーバーロード エラーが表示されます。 、明示的にcharにキャストしましたが。しかし、私はそれを次のように動作させることができました:
bout.operator<<((unsigned char) 255u);
これは、g++ が暗黙のキャストを行う方法と関係があるに違いありません (私の推測では、最初のケースでユーザー定義のキャストの後に、もう 1 つの可能なキャストがあり、関数呼び出し構文が回避することを曖昧にしています)。なぜこれが起こっているのか、またはエラーを回避するより良い構文があるのか を正確に知っている人はいますか?