読者です 読者をやめる 読者になる 読者になる

friend bool operator<(const X&lhs,const X&rhs)って構文をboost::operatorsを見て初めて知った

先日ふと

「std::tieがあるのでこれを使って9割自動比較演算子のオーバーロードを作ろう」とか考えまして、途中で「boost::operatorsでいいじゃん」と気が付きまして

boost::operatorsってのは演算子の自動生成装置でして

例えばoperator<を定義しておけばoperator>,operator<=,operator>=が定義されるなど便利なもんです

コストは調べたところほぼ0(関数呼び出しのオーバーヘッドがあるかもしれないくらい?)

使い方はほかに任せるとして

 

これの原理は

  1. operator<が定義され,boost::operators<C>を継承したCがあるとして
  2. x>y     (C x,y)をすると
  3. まずCにoperator>がないことを確認し
  4. 親クラスからfriend bool operator<(const T&lhs,const T&rhs)   (class T=C)を見つけそれを実行する

ざっくりいうとこういうことらしい

boost\operators.hppの中はほかにもいろんなことが書いてあるんだけれど魔境過ぎて読めなかったよ

 

で,肝心要のoperator<の実装は

std::tie(a,b,c) < std::tie(rhs.a, rhs.b, rhs.c);

 ってやれば一行で終わるねやったね凄いねっていう話でした