您好我想在private scope
下将成员函数的指针声明为成员数据,并使getter
从外部获取它:
class A
{
public:
A(){ ptr = Foo;} // for example: ok
void Foo(){ cout << "Foo()" << endl;}
void Bar(){ cout << "Bar()" << endl;};
void (A::*)() GetPtrFunc() {return ptr;} // error here?
private:
void (A::*ptr)(); // ok here
};
正如您所看到的,ptr
是类A
的成员,它是指向同一类的成员类的指针,所以我不能从外部使用它,那么如何在getter中返回它?
答案 0 :(得分:4)
虽然有办法写出这个声明,但你会发现使用typedef
时不那么容易混淆:
typedef void (A::*mem_func_ptr)();
mem_func_ptr GetPtrFunc() {return ptr;}
private:
mem_func_ptr ptr; // ok here
此外,您在构造函数中的初始化不正确。完整,更正的例子:
#include <iostream>
using namespace std;
class A
{
public:
A(){ ptr = &A::Foo;}
void Foo(){ cout << "Foo()" << endl;}
void Bar(){ cout << "Bar()" << endl;};
typedef void (A::*mem_func_ptr)();
mem_func_ptr GetPtrFunc() {return ptr;} // error here?
private:
mem_func_ptr ptr; // ok here
};
答案 1 :(得分:2)
您可以在GetPtrFunc
后移动ptr
并声明decltype(ptr)
:
private:
void (A::*ptr)() = &A::Foo;
public:
decltype(ptr) GetPtrFunc() { return ptr; };
或(没有订单限制)只需声明auto
,cretig转到 @ Jarod42 和 @ user975989 :
auto GetPtrFunc() { return ptr; };