(注: BoostまたはC ++ 11tupleからtie取得できます。)
2つの要素のみを含む小さな構造体を作成する場合、厳密な弱順序のstd::pairように、そのデータ型に対してすべての重要な処理が既に行われているため、を選択する傾向があります。 operator<。
ただし、欠点は、ほとんど役に立たない変数名です。私自身がそれを作成したとしても、特に両方が同じタイプである場合、2日後に正確に何がtypedef何であったかを思い出せません。これは、2人以上のメンバーにとってはさらに悪化します。これは、ネストが非常に悪いためです。
そのための他のオプションはfirstsecondpairtuple、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作成します。)tupleT&
編集:@DeadMGから個人的に継承するという提案tupleは悪いものではありませんが、かなりの欠点があります:
- オペレーターが独立している場合(おそらく友達)、私は公に継承する必要があります
- キャスティングを使用すると、私の関数/演算子(
operator=具体的には)を簡単にバイパスできます - この
tieソリューションを使用すると、特定のメンバーが注文に関係ない場合は除外できます
この実装には、考慮する必要のある欠点がありますか?