C++实现的lambda Y算子

来源:互联网 发布:淘宝 0.0.0.1 编辑:程序博客网 时间:2024/06/10 04:10

#include <windows.h>
#include <stdio.h>

class FUNC{
public :
 virtual int operator()(int a, int b)
 {
  return a + b;
 }
};

class FUNC2 : public FUNC{
public :
 int operator()(int a, int b)
 {
  return a * b;
 }
};

int callfunc(FUNC &f, int a, int b)
{
 return f(a, b);
}

 

class CurFunc;
class Y;

class CurFunc{
public :
 virtual int operator()(Y &f, int n)
 {
  return 0;
 }
};

class Y{
public :
 CurFunc *mfunc;
 Y(CurFunc &k) : mfunc(&k){}
 int operator()(int n)
 {
  return (*mfunc)(*this, n);
 }
};

class Fab : public CurFunc{
public :
 int operator()(Y &f, int n)
 {
  if(n > 1)
   return n * f(n - 1);
  else
   return 1;
 }
};

void main()
{
 FUNC2 add;
 Fab fab;
 int out = Y(fab)(5);
 printf("the number is %d/n", callfunc(add, 10, 20));
 printf("the number is %d/n", Y(fab)(10));
}

原创粉丝点击