如何使成员函数返回指向成员函数的指针?

时间:2017-01-27 21:41:18

标签: c++ pointer-to-member

您好我想在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中返回它?

2 个答案:

答案 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; };