c++传递函数参数

传递普通函数和类的成员函数方式不同,原因是传递函数参数实际传的是函数的地址,但是普通函数和成员函数的地址获取方式不太相同。普通函数只要传递一个函数名称即可,但是成员函数在类的内部中没有地址,选择一个成员函数就意味着得知道该函数在类中的偏移量,因此需要知道该对象和对应的偏移量,才能得到真实的地址。当然,你也可以将成员函数设置为静态函数(static)来当作普通函数来看待。

由于处理方式不同,所以可以采用函数重载的方式。由于每次传的对象类型可能不同,所以采用template。

代码如下:

1 #include<iostream>;
 2 using namespace std;
 3 class ABC {
 4     public:
 5         void f1(int n, int b);
 6         void f2(int n);
 7 };
 8 
 9 void ABC::f1(int n, int b) {
10     cout << n << "," << b << endl;
11 }
12 
13 void ABC::f2(int n) {
14     cout << "member function:" << n << endl;
15 }
16 
17 void f(int n) {
18      cout << "normal function: " << n << endl;
19 }
20 // normal function
21 void cb(void(*callback)(int), int n) {
22      callback(n);
23 }
24 // member function
25 template <class T>
26 void cb(T *obj, void (T::*callback)(int), int n) {
27      (obj->*callback)(n);
28 }
29 int main(void) {
30     ABC *abc = new ABC();
31     abc->f1(1, 2);
32     abc->f2(3);
33     // invoke member function
34     cb(abc, &ABC::f2, 4);
35     // invoke normal function
36     cb(f, 5);
37     
38     system("pause");
39     return 0;
40 }

原文链接: https://www.cnblogs.com/bilipan/archive/2012/09/13/2683325.html

欢迎关注

微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍

原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/62691

非原创文章文中已经注明原地址,如有侵权,联系删除

关注公众号【高性能架构探索】,第一时间获取最新文章

转载文章受原作者版权保护。转载请注明原作者出处!

(0)
上一篇 2023年2月9日 上午10:31
下一篇 2023年2月9日 上午10:31

相关推荐