C++中关于委派(Delegates)的实现示例

2020-01-06 13:19:38于丽

易采站长站为您分析C++中关于委派(Delegates)的实现示例,针对C++11的一些新特性进行讲解,需要的朋友可以参考下

介绍

在 C++ 中通过一个全局函数来绑定到对象的成员函数是很有用的,这个特性也存在于其他语言中,例如 C#的委派。在 C++ 中相当于成员函数指针,但是 并没有提供相应的特性。在这篇文章中,我想提出一个简单的 C++ 委派的实现,是用 C++ 成员函数指针和 C++11 的可变模板(variadic templates),目前这套实现方法仅支持 GNU C++ 4.7.0,在 Windows 下可使用 MinGW。

背景

在我的方法中奖提供一个create_delegate函数,可通过下面两种方法来调用:

 

 
  1. create_delegate(&object, &member_function)  create_delegate(&function) 

第一种方法创建一个对象并提供一个operator()成员函数,第二个方法生成一个函数指针,两种方法都兼容 type function<...>.

示例程序

首先我们定义一个包含多个方法的类:

 

 
  1. class A  { 
  2. int i;  public:  
  3. A(int k):i(k) {}   
  4. auto get()const ->int { return i;}   auto set(int v)->void { i = v;} 
  5.   auto inc(int g)->int& { i+=g; return i;} 
  6. auto incp(int& g)->int& { g+=i; return g;}   
  7. auto f5 (int a1, int a2, int a3, int a4, int a5)const ->int  { 
  8. return i+a1+a2+a3+a4+a5;  } 
  9.   auto set_sum4(int &k, int a1, int a2, int a3, int a4)->void