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