fork download
  1. #include <iostream>
  2.  
  3. namespace operators
  4. {
  5. template <class Fun>
  6. struct composer
  7. {
  8. Fun fun;
  9. };
  10.  
  11. struct compose_t {} compose;
  12.  
  13. template <class Fun>
  14. composer<Fun> operator < (Fun fun, compose_t) { return {fun}; }
  15.  
  16. template <class Fun1, class Fun2>
  17. decltype(auto) operator > (composer<Fun1> comp1, Fun2 fun2) {
  18. return [=](auto... v) {
  19. return fun2(comp1.fun(std::forward<decltype(v)>(v)...));
  20. };
  21. }
  22. }
  23.  
  24. struct filter {
  25. float operator()(float v) { return v; }
  26. };
  27.  
  28. struct envelope {
  29. void set_slider1(float v) {}
  30. void set_slider2(float v) {}
  31. void set_slider3(float v) {}
  32. };
  33.  
  34. int main() {
  35. using namespace operators;
  36.  
  37. auto composed = [](float v) { return v * 2; } <compose>
  38. [](float v) { return v / 2; } <compose>
  39. [](float v) { return v * v; };
  40.  
  41. std::cout << composed(10.f) << std::endl;
  42. return 0;
  43. }
Success #stdin #stdout 0s 4476KB
stdin
Standard input is empty
stdout
100