c++ - 如何创建一个返回成员函数指针的成员函数?

标签 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 返回它?

最佳答案

虽然有一种方法可以写出这个声明,但您会发现使用 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
};

关于c++ - 如何创建一个返回成员函数指针的成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41903463/

相关文章:

c++ - 是否可以使用非常量指针调用非常量函数,以及当两个 unique_ptr 指向同一个对象时程序将如何运行?

c++ - 如何避免 "dynamic initialization in unreachable code"警告?

c++ - 成员函数指针c++

c++ - 模板类的成员函数指针

c++ - 如何将函数指针(我们不知道参数的函数)声明为类成员?

c++ - 如何在 C++ 中模板化接受模板化参数并在其上应用模板化函数的函数?

c++ - C++ 中的运行时位复制(位掩码)

c++ - 求解 cos() 和 sin() 内部的变量

c++ - 为什么我必须使用std::make_pair?

c++ - 从指针到成员的映射