(注: BoostまたはC ++ 11tuple
からtie
取得できます。)
2つの要素のみを含む小さな構造体を作成する場合、厳密な弱順序のstd::pair
ように、そのデータ型に対してすべての重要な処理が既に行われているため、を選択する傾向があります。 operator<
。
ただし、欠点は、ほとんど役に立たない変数名です。私自身がそれを作成したとしても、特に両方が同じタイプである場合、2日後に正確に何がtypedef
何であったかを思い出せません。これは、2人以上のメンバーにとってはさらに悪化します。これは、ネストが非常に悪いためです。
そのための他のオプションはfirst
second
pair
tuple
、BoostまたはC ++ 11のいずれかからですが、それは実際には見栄えがよくありません。それで、必要な比較演算子を含めて、自分で構造体を書くことに戻ります。
特に、operator<
は非常に面倒な場合があるため、次のように定義された操作に依存するだけで、この混乱全体を回避することを考えましたtuple
。
例operator<
:たとえば、strict-weak-orderingの場合:
bool operator<(MyStruct const& lhs, MyStruct const& rhs){
return std::tie(lhs.one_member, lhs.another, lhs.yet_more) <
std::tie(rhs.one_member, rhs.another, rhs.yet_more);
}
(渡された引数から の参照をtie
作成します。)tuple
T&
編集:@DeadMGから個人的に継承するという提案tuple
は悪いものではありませんが、かなりの欠点があります:
- オペレーターが独立している場合(おそらく友達)、私は公に継承する必要があります
- キャスティングを使用すると、私の関数/演算子(
operator=
具体的には)を簡単にバイパスできます - この
tie
ソリューションを使用すると、特定のメンバーが注文に関係ない場合は除外できます
この実装には、考慮する必要のある欠点がありますか?