我只是在学习C++,而且我在指向方法方面遇到了困难.让我们说:
class One {
public:
int Add (int a, int b) {return a+b;}
};
typedef int (One::*pAdd) (int, int);
class Other {
public:
int Next (pAdd funct, int c){ return funct (c, 1);}
};
int main (){
One one;
Other other;
other.Next(one.Add, 2);
return 0;
}
根据我的MinGW的报告,我有很多问题.首先,我没有正确调用函数,因为编译器坚持使用.*或 - >*.不知道如何纳入此请求,欢迎任何帮助.现在,我可以通过使方法静态使用c样式指针或传递对象并从Next中调用方法来解决我的问题,但我想理解指向方法的指针.基本上,我很困惑为什么一个.添加不是一个可接受的输入.调用方法是明确定义的(.Add)并符合我的typedef.另外,我从typedef提供了类(一)的实例,从而提供了执行方法的上下文.但编译器输出看起来我不仅错过了语法,而且我错过了这个概念.那么,如何将指向对象的方法作为上下文作为单个参数传递?
这里的主要问题是成员函数不与对象实例相关联,它们只是具有略微不同签名的函数指针.
因此,当您想要调用成员函数时,您需要两件事:指向成员函数的指针和调用它的对象实例.
我稍微改了你的代码示例:
#include <iostream>
class One {
public:
    int Add (int a, int b) {return a+b;}
};
typedef int (One::*pAdd) (int, int);
class Other {
public:
    int Next (One one, pAdd funct, int c){
        return (one.*funct)(c, 1);
    }
};
int main (){
    One one;
    Other other;
    std::cout << other.Next(one, &One::Add, 2) << std::endl;
    return 0;
}
和它的作品了.它可能会有所改善,但我认为你可以从这里开始.
我建议你阅读指针到c ++ faq lite的成员函数部分,这很好地解释了这一点.