0

簡単なタスク: 私はこれらの 2 つのタイプを持っています

struct type_a{
   int member;
};

struct type_b{
   int member;
};

私はこの新しい C++20 の宇宙船 op を使いたいと思っていますtype_a{} == type_b{}。私はそれをすることができませんでした。それらの間で書いてもoperator<=>、 を呼び出すことしかできtype_a{} <=> type_b{}ず、単純な比較はできません。単一のクラスと同様に混乱します。3 者間比較は他のすべてのクラスも定義します。

代替処方?std::three_way_comparable_with<type_a, type_b>それが真実であるようにするにはどうすればよいですか?

4

2 に答える 2

-1

あるタイプを別のタイプに変換可能にすることをお勧めします。

struct type_a{
   int member;
   friend auto operator<=>(const type_a&, const type_a&) = default;
};

struct type_b{
   int member;
   operator type_a() {
       return {member};
   }
};

これは operator<=> の前の解決策でもありましたが、共通の型の比較を定義する方が簡単になりました。

于 2022-01-13T19:42:52.163 に答える