木曜日, 7月 18, 2013

自作クラスの比較オペレータを効率的に定義する方法

以下のアイデアはSafe C++で紹介されている.

#include <iostream>
using namespace std;

class MyClass {
private:
 int price;
public:
 explicit MyClass(int priceParam) : price(priceParam) {}
 int CompareTo(const MyClass& a) const {
  if( price == a.price )
   return 0;
  else if( price < a.price )
   return -1;
  else
   return 1;
 }

#define CMP(Class) \
 bool operator < (const Class& that) const { return CompareTo(that) < 0; } \
 bool operator > (const Class& that) const { return CompareTo(that) > 0; } \
 bool operator == (const Class& that) const { return CompareTo(that) == 0; } \
 bool operator <= (const Class& that) const { return CompareTo(that) <= 0; } \
 bool operator >= (const Class& that) const { return CompareTo(that) >= 0; } \
 bool operator != (const Class& that) const { return CompareTo(that) != 0; }

 CMP(MyClass);


};

int main() {

 MyClass A(32),B(60),C(32);
 if( A == C )
  cout << "A == C" << endl;
 if( B > A )
  cout << "B > A." << endl;
 if( A < B )
  cout << "A < B." << endl;
 if( A != B )
  cout << "A != B." << endl;

}



0 件のコメント: