如何将函数指针传递给成员函数c++?
Posted
技术标签:
【中文标题】如何将函数指针传递给成员函数c++?【英文标题】:How to pass function pointer to member function c++? 【发布时间】:2017-10-29 13:31:01 【问题描述】:所以这就像我关于该主题的第二个问题,但这次我想知道如果我传递一个 int 类型的函数会怎样。就像这里我想将 fun1 的输出存储在主函数中的变量“int my”中.我应该如何为此编写包装函数?
#include<iostream>
using namespace std;
class student
public:
int fun1(int m)
return 2*m;
int wrapper(int (student::*fun)(int k))
(this->*fun)(int k)
;
int main()
student s;
int l=5;
int my=s.wrapper(&student::fun1(l));
cout << m << endl;
return 0;
【问题讨论】:
你想用这个包装函数实现什么是有问题的。 完全错误。(this->*fun)(int k)
不是有效的 C++,@user0042。
@user0042 出现错误 :(
@codie 考虑阅读错误信息。它通常会告诉您出了什么问题。
(this->*fun)(int k)
不是有效的 C++。这是一个函数调用,与任何其他函数调用没有什么不同,只是该函数是通过方法指针调用的。函数调用有值作为参数。例如,要将值 2 传递给采用 int
参数的函数,您只需指定值 2。而不是 int 2
。
【参考方案1】:
包装器调用者需要两个参数: 一个用于调用的函数,一个用于 调用它的参数
int wrapper(int (student::*fun)(int), int k)
return (this->*fun)(k);
这样称呼:
int my = s.wrapper(&student::fun1, 1);
cout << my << endl;
看这里http://coliru.stacked-crooked.com/a/cd93094c38bfa591
【讨论】:
【参考方案2】:当标准库中提供了mem_fn()
时,为什么还要创建自己的包装器:
int my = mem_fn(&student::fun1)(&s,l);
cout<<my<<endl;
Online demo
【讨论】:
以上是关于如何将函数指针传递给成员函数c++?的主要内容,如果未能解决你的问题,请参考以下文章