fork(1) download
  1. #include <utility>
  2. #include <algorithm>
  3. #include <iostream>
  4.  
  5. template<typename D, typename P, P> struct projection;
  6.  
  7. template<typename Data, typename Class, typename Return, Return (Class::*member_function) () const>
  8. struct projection<Data, Return (Class::*) () const, member_function> {
  9. Data data;
  10. projection (Class const & object)
  11. : data ((object.*member_function)()) {}
  12. /* template<typename X>
  13.  projection (X&& input)
  14.   : data (std::forward<X>(input)) {}*/
  15. projection (Data d) : data (d) {}
  16. };
  17.  
  18.  
  19. struct Item {
  20. int x;
  21. int get () const { return x; }
  22. };
  23.  
  24.  
  25. int main () {
  26. Item items [] = {1,2,3,4,5,99};
  27. using P = projection<int, decltype(&Item::get), &Item::get>;
  28. auto compare = [](P const & left, P const & right) {
  29. return left.data < right.data; };
  30. std::cout << std::binary_search(
  31. std:: begin (items), std::end(items),
  32. 4, compare)
  33. << std::endl;
  34. std::cout << std::binary_search(
  35. std:: begin (items), std::end(items),
  36. 44, compare)
  37. << std::endl;
  38. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
1
0