C++ 如何获取类成员函数指针

C++ 如何获取类成员函数指针,c++,pointers,C++,Pointers,对于一个类,我想存储一些指向另一个类的成员函数的函数指针。我试图返回一个类成员函数指针。可能吗 class one{ public: void x(); void y(); }; typedef void(one::*PF)(void); class two :public one{ public: virtual PF getOneMethodPointer(); }; class three : public two{ std::vector<PF> poin

对于一个类,我想存储一些指向另一个类的成员函数的函数指针。我试图返回一个类成员函数指针。可能吗

class one{
public:
  void x();
  void y();
};
typedef void(one::*PF)(void);

class two :public one{
public:
  virtual PF getOneMethodPointer();
};

class three : public two{
  std::vector<PF> pointer_to_function;
  PF getOneMethodPointer();
    pointer_to_function.push_back(getOneMethodPointer())? //how to get method x from class one?
};
第一类{
公众:
void x();
空y();
};
类型定义无效(一个::*PF)(无效);
第二类:公共一级{
公众:
虚拟PF getOneMethodPointer();
};
第三类:公共二类{
std::指向函数的向量指针;
PF getOneMethodPointer();
指向函数的指针。推回(getOneMethodPointer())?//如何从类1获取方法x?
};

> > p> C++的语法是:

class two: public one{
  virtual PF getOneMethodPointer(){
    return &one::x;
  }
};

C++的句法结构是:

class two: public one{
  virtual PF getOneMethodPointer(){
    return &one::x;
  }
};

C++的句法结构是:

class two: public one{
  virtual PF getOneMethodPointer(){
    return &one::x;
  }
};

C++的句法结构是:

class two: public one{
  virtual PF getOneMethodPointer(){
    return &one::x;
  }
};

在C++11/14中,您可以始终使用
std::function
包装器来避免编写不可读的旧C风格函数指针。下面是一个使用这种方法的简单程序:

#include <iostream>
#include <functional>

using namespace std;

class one {
public:
    void x() {  cout << "X called" << endl; }
    function<void()> getOneMethodPointer();
};

class two : public one {
public:
    function<void()> getOneMethodPointer() {
        return bind(&one::x, this);
    }
};

int main()
{
    two* t = new two();
    t->getOneMethodPointer()();
    delete t;
    return 0;
}

在C++11/14中,您可以始终使用
std::function
包装器来避免编写不可读的旧C风格函数指针。下面是一个使用这种方法的简单程序:

#include <iostream>
#include <functional>

using namespace std;

class one {
public:
    void x() {  cout << "X called" << endl; }
    function<void()> getOneMethodPointer();
};

class two : public one {
public:
    function<void()> getOneMethodPointer() {
        return bind(&one::x, this);
    }
};

int main()
{
    two* t = new two();
    t->getOneMethodPointer()();
    delete t;
    return 0;
}

在C++11/14中,您可以始终使用
std::function
包装器来避免编写不可读的旧C风格函数指针。下面是一个使用这种方法的简单程序:

#include <iostream>
#include <functional>

using namespace std;

class one {
public:
    void x() {  cout << "X called" << endl; }
    function<void()> getOneMethodPointer();
};

class two : public one {
public:
    function<void()> getOneMethodPointer() {
        return bind(&one::x, this);
    }
};

int main()
{
    two* t = new two();
    t->getOneMethodPointer()();
    delete t;
    return 0;
}

在C++11/14中,您可以始终使用
std::function
包装器来避免编写不可读的旧C风格函数指针。下面是一个使用这种方法的简单程序:

#include <iostream>
#include <functional>

using namespace std;

class one {
public:
    void x() {  cout << "X called" << endl; }
    function<void()> getOneMethodPointer();
};

class two : public one {
public:
    function<void()> getOneMethodPointer() {
        return bind(&one::x, this);
    }
};

int main()
{
    two* t = new two();
    t->getOneMethodPointer()();
    delete t;
    return 0;
}


getOneMethodPointer()可以返回指向void x()的指针;方法?getOneMethodPointer()方法应该是什么类型?@szpryc您使用retun type
PF
定义了它,因此它应该返回一个
PF
对象,例如
&one::x
。这与返回类型为
int
的函数返回
42
没有太大区别。您可能会发现,借助于一个工具来澄清这些概念很有用。@szpryc我刚刚编辑了答案以匹配编辑的问题。但是你可能还想再编辑一下这个问题——现在你有了函数之外的代码,这在语法上是毫无意义的。@szpryc你能详细解释一下吗?它如何“不起作用?”我已经添加了一个指向答案的实例链接。getOneMethodPointer()可以返回指向void x()的指针;方法?getOneMethodPointer()方法应该是什么类型?@szpryc您使用retun type
PF
定义了它,因此它应该返回一个
PF
对象,例如
&one::x
。这与返回类型为
int
的函数返回
42
没有太大区别。您可能会发现,借助于一个工具来澄清这些概念很有用。@szpryc我刚刚编辑了答案以匹配编辑的问题。但是你可能还想再编辑一下这个问题——现在你有了函数之外的代码,这在语法上是毫无意义的。@szpryc你能详细解释一下吗?它如何“不起作用?”我已经添加了一个指向答案的实例链接。getOneMethodPointer()可以返回指向void x()的指针;方法?getOneMethodPointer()方法应该是什么类型?@szpryc您使用retun type
PF
定义了它,因此它应该返回一个
PF
对象,例如
&one::x
。这与返回类型为
int
的函数返回
42
没有太大区别。您可能会发现,借助于一个工具来澄清这些概念很有用。@szpryc我刚刚编辑了答案以匹配编辑的问题。但是你可能还想再编辑一下这个问题——现在你有了函数之外的代码,这在语法上是毫无意义的。@szpryc你能详细解释一下吗?它如何“不起作用?”我已经添加了一个指向答案的实例链接。getOneMethodPointer()可以返回指向void x()的指针;方法?getOneMethodPointer()方法应该是什么类型?@szpryc您使用retun type
PF
定义了它,因此它应该返回一个
PF
对象,例如
&one::x
。这与返回类型为
int
的函数返回
42
没有太大区别。您可能会发现,借助于一个工具来澄清这些概念很有用。@szpryc我刚刚编辑了答案以匹配编辑的问题。但是你可能还想再编辑一下这个问题——现在你有了函数之外的代码,这在语法上是毫无意义的。@szpryc你能详细解释一下吗?它是如何“不起作用的?”我在答案中添加了一个实例链接。如果我希望函数“getOneMethodPointer()”是虚拟的,是否可能?声明返回指向另一个方法的指针的虚拟成员方法?这在远程上与OP的代码不同。指向成员的指针是“可重新绑定的”。
std::function
不是。@szpryc我在答案中添加了一个示例。如果我希望函数“getOneMethodPointer()”是虚拟的,是否可能?声明返回指向另一个方法的指针的虚拟成员方法?这在远程上与OP的代码不同。指向成员的指针是“可重新绑定的”。
std::function
不是。@szpryc我在答案中添加了一个示例。如果我希望函数“getOneMethodPointer()”是虚拟的,是否可能?声明返回指向另一个方法的指针的虚拟成员方法?这在远程上与OP的代码不同。指向成员的指针是“可重新绑定的”。
std::function
不是。@szpryc我在答案中添加了一个示例。如果我希望函数“getOneMethodPointer()”是虚拟的,是否可能?声明返回指向另一个方法的指针的虚拟成员方法?这在远程上与OP的代码不同。指向成员的指针是“可重新绑定的”。
std::function
不是。@szpryc我在答案中添加了一个示例。