fork download
  1. #include <iostream>
  2. #include <algorithm>
  3. using namespace std;
  4.  
  5. class CompareOptionalInfo {};
  6. class CompareResult
  7. {
  8. public:
  9. CompareResult(double d=0.0) : confidence_(d) {};
  10. operator double() { cout<<"(dbl conversion was used)"<<endl; return confidence_; }
  11. operator bool() { cout<<"(bool conversion was used)"<<endl; return confidence_>0.5; }
  12. bool operator< (const CompareResult& x) const { return confidence_<x.confidence_; }
  13. private:
  14. double confidence_;
  15. CompareOptionalInfo compare_optional_info_;
  16. };
  17.  
  18. struct Foo
  19. {
  20. double d;
  21. static CompareResult Compare(const Foo& foo1, const Foo& foo2) { if (foo1.d==foo2.d) return true; else return 1.0/(foo1.d-foo2.d); }
  22. };
  23.  
  24.  
  25. int main() {
  26. Foo f1,f2,f3;
  27. f1.d =1.3; f2.d=1.4; f3.d=5.0;
  28. auto result = Foo::Compare (f1, f2);
  29. if (result) cout << "similar";
  30. if ((double)result>0.0) cout << "not fully different";
  31. auto closest = std::max(Foo::Compare (f1, f2), Foo::Compare (f2, f3));
  32. cout << "closest:"<<(double)closest<<endl;
  33.  
  34. return 0;
  35. }
Success #stdin #stdout 0s 3468KB
stdin
Standard input is empty
stdout
(bool conversion was used)
(dbl conversion was used)
(dbl conversion was used)
closest:-0.277778