C++中返回函数指针的成员函数的语法
syntax in C++ for member function returning a function pointer
我有下面的程序,我想修复它。不知道如何使其语法正确。
class A{
void f(){};
void (A::*)()get_f(){return &A::f;}
};
此外,我想最终移动函数定义大纲如下。
void A::(*)()A::get_f(){
return &A::f;
}
这里的正确语法是什么?
非常感谢你的帮助!
像这样:
class A{
void f(){};
void (A::*get_f())() {return &A::f;}
};
类似地:
void (A::* A::get_f())(){
return &A::f;
}
在ideone上看到它的动作。请注意,使用它与使用typedef(在其他答案中(是一样的。
BTW,额外点数和呕吐物(哈,哈(:
void (A::* (A::* get_get_f())())();
只需使用typedef:
class A {
typedef void (A::*AFn)();
void f() { }
AFn get_f(){ return &A::f; }
};
最简单的解决方案是typedef:
class A
{
typedef void (A::*funptr)();
void f() {}
funptr get_f() { return &A::f; }
};
如果你坚持直接写,请使用
class A
{
void f() {}
void (A::*get_f())() { return &A::f; }
};
使用typedef,它只会使语法更容易理解。
在下面的示例中,函数是在类之外定义的。
class A{
typedef void (A::*p)();
void f(){};
p get_f();
};
A::p A::get_f() { return &A::f; }
你可以用同样的方式在类中定义它,
class A{
typedef void (A::*p)();
void f(){};
p get_f() { return &A::f; }
};
class A{
public:
typedef void(A::*mem_ptr)();
void f(){};
mem_ptr get_f();
};
A::mem_ptr A::get_f()
{return &A::f;}
int main() {
A a;
A::mem_ptr p = a.get_f();
(a.*p)();
}
http://ideone.com/Q7G4s
来源:http://www.parashift.com/c++-faq-lite/pointers to members.html#faq-33.6
相关文章:
- 如何使用指针传递给函数的数组中对象的函数成员
- c++构造函数成员初始化:传递参数
- 创建 std::函数,它返回具有函数成员值的变量.分段错误
- 如何在C++通过公共函数访问私有函数成员?
- 解释了构造函数成员初始化列表
- 调用std::函数成员时内存损坏
- 是否可以为模板类的模板函数成员设置别名?
- 捕获 lambda 函数C++成员变量
- 构造函数成员初始值设定项跨成员列出,安全吗?
- 获取与在模板参数中传递的函数成员类型相同的类
- 如何从公共函数成员访问地图私有成员
- C 构造函数成员分配优化
- 使用命名空间进行函数成员定义
- 函数成员作为 CUDA 内核的参数
- 模板基类函数成员的别名
- 函数成员中用于void和继承的enable_if
- 头文件中是否定义了一个很长的Class函数成员
- 类内/构造函数成员初始化
- 使用指向部分专用函数成员的指针自动填充向量
- 指向函数成员的指针