1

基本型のラッパー クラスを作成しているので、型付けできるようになっています...ただし、問題が発生しました。うまくするには、これらの両方の方法が必要です。

Integer32(FastInteger32 value);
Boolean operator>(Integer32 value);
operator FastInteger32();

「FastInteger」と「Integer」の間で「>」演算子を使用する場合を除いて、コンパイラは 2 つの可能なルートを認識し、1 つを選択するだけでなく、失敗します。1つだけ選ぶように指示する方法はありますか?

コード全体:

typedef unsigned int FastInteger32;

class Integer32
{
public:
    Integer32(FastInteger32 value);
    Boolean operator>(Integer32 value);
    operator FastInteger32();
private:
    FastInteger32 value;
};

int main()
{
    Integer32 a = 5;
    FastInteger32 b = 5;
    if (a < b) { }  // Doesn't know what to do here, convert b to Integer32 and compare or convert a to FastInteger32 and compare
}

ところで、あなたたちはロックします、助けてくれてありがとう!

4

2 に答える 2

1

問題はコンストラクター ( Integer32(FastInteger32 value);) にあります。単一引数のコンストラクターは、(ほぼ) 常に として宣言する必要がありますexplicit。宣言をexplicit Integer32(FastInteger32 value);;に変更するだけです。定義を変更してはなりません。

于 2013-01-14T08:31:00.263 に答える
1

C++ は、変換をまったく行わないオーバーロードを常に優先します。したがって、 と を追加するbool operator<(FastInteger32, Integer32)と、bool operator<(Integer32, FastInteger32)すべてのあいまいさがなくなります。

于 2013-01-14T08:34:20.930 に答える