私は以下の演算子が定義されました:クラス定義外の演算子のオーバーロードを優先するには?
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint8_t b);
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint32_t b);
int
とオペレーターを呼び出すときに、私はエラーを取得:
/misc.hpp:77:12: error: ambiguous overload for ‘operator<<’ (operand types are ‘std::vector<unsigned char>’ and ‘int’)
buffer << first;
~~~~~~~^~~~~~~~
./misc.hpp:62:23: note: candidate: std::vector<unsigned char>& operator<<(std::vector<unsigned char>&, uint8_t)
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint8_t b);
^~~~~~~~
./misc.hpp:63:23: note: candidate: std::vector<unsigned char>& operator<<(std::vector<unsigned char>&, uint32_t)
std::vector<uint8_t> &operator<<(std::vector<uint8_t> &bytes, uint32_t b);
私はuint8_t
版が優先させることができ、Iドンように、その演算子を呼び出すには、型キャストが必要です(例:static_cast<uint8_t>
)。
これらのオーバーロードはどのように異なるのですか?なぜただ一つしかないのですか? – LogicStuff
@RustyXこれは絶対に間違っています。 C++ではなく、標準より前のCルールについて考えています。 – Quentin
正直なところ、 'static_cast'は、あなたが望むものを達成するための本当にクリーンな方法です。 –
AndyG