fork download
  1. #include <iostream>
  2. #include <functional>
  3.  
  4. template<class R,class derived> class Base;
  5. template<class F>
  6. class AnyFunction:public Base<typename std::function<F>::result_type,AnyFunction<F>>{
  7. std::function<F> Fun;
  8. public:
  9.  
  10. typedef typename std::function<F>::result_type RT;
  11.  
  12. AnyFunction(std::function<F> Function){
  13. Fun = Function;
  14. }
  15.  
  16. RT DoFunction(typename std::function<F>::argument_type&& Arge){
  17. return Fun(Arge);
  18. }
  19.  
  20. };
  21.  
  22. template<class R,class Derived>
  23. class Base
  24. {
  25.  
  26. public:
  27.  
  28. typedef R RT;
  29. public:
  30. template<class ...Arges>
  31. RT operator()(Arges&& ... Arge){
  32. return static_cast<Derived*>(this)->DoFunction(Arge...);
  33. }
  34. };
  35.  
  36.  
  37.  
  38. int main(){
  39.  
  40. AnyFunction<int(int&)> AF([](int& N)->int{std::cout <<"Calling Lambada!"<< std::endl; return N; });
  41.  
  42. int N = AF(10);
  43.  
  44. std::cout << AF(10) << std::endl;
  45.  
  46. return 0;
  47. }
Success #stdin #stdout 0s 3472KB
stdin
Standard input is empty
stdout
Calling Lambada!
Calling Lambada!
10