为了账号安全,请及时绑定邮箱和手机立即绑定

如何通过需要自由函数的成员函数?

如何通过需要自由函数的成员函数?

C++
千巷猫影 2019-08-12 10:02:37
如何通过需要自由函数的成员函数?问题如下:考虑这段代码:#include <iostream>class aClass{public:     void aTest(int a, int b)     {         printf("%d + %d = %d", a, b, a + b);     }};void function1(void (*function)(int, int)){     function(1, 1);}void test(int a,int b){     printf("%d - %d = %d", a , b , a - b);}int main (int argc, const char* argv[]){     aClass a();     function1(&test);     function1(&aClass::aTest); // <-- How should I point to a's aClass::test function?     return 0;}我如何使用a's aClass::test作为参数function1?我坚持这样做。我想访问该班级的成员。
查看完整描述

3 回答

?
偶然的你

TA贡献1841条经验 获得超3个赞

但您也可以在不将class实例作为function1C ++ 11中的显式参数传递的情况下执行此操作:

#include <functional>using namespace std::placeholders;void function1(std::function<void(int, int)> fun){
    fun(1, 1);}int main (int argc, const char * argv[]){
   ...

   aClass a;
   auto fp = std::bind(&aClass::test, a, _1, _2);
   function1(fp);

   return 0;}


查看完整回答
反对 回复 2019-08-12
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

指向成员函数的指针与指向函数的指针不同。为了通过指针使用成员函数,您需要一个指向它的指针(显然)和一个要应用它的对象。所以适当的版本function1将是

void function1(void (aClass::*function)(int, int), aClass& a) {
    (a.*function)(1, 1);}

并称之为:

aClass a; // note: no parentheses; with parentheses it's a function declarationfunction1(&aClass::test, a);


查看完整回答
反对 回复 2019-08-12
  • 3 回答
  • 0 关注
  • 476 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信