C++使用指针访问成员函数

C++ Access member function using pointer

我无法使用 pointer.Find 下面的代码和错误消息访问成员函数 此处提到了错误消息 错误:在'* objA.A::getfunction()'中请求成员'getstream',它是非class类型'int' ret = objA.getfunction()->getstream();

#include <iostream>

using namespace std;

class A {
    public: 
    int *getfunction();
    int getstream();
};
int* A::getfunction()
{
      static  int a;
     a= getstream();

    return &a;
}

int getstream()
{
    return 1;
}
int main()
{
int *ret;
A objA;
ret = objA.getfunction()->getstream();
cout << ret;
return 0;
}

如果你想在主函数中实现类似 objA.getfunction()->getstream(); 的语法, 您可以使用类似于此的 class A 实现来做到这一点:

#include <iostream>

using namespace std;

// class A declaration

class A {

public:
    // Nested class A::AFunction declaration
    class AFunction {
    public:
        int getstream();
    };

private:
    AFunction *p_AFunction;

public:
    A();
    ~A();
    A::AFunction *getfunction();

}; // class A

// class A member function implementations

A::A() : p_AFunction(new AFunction()) {
}

A::~A() {
    delete p_AFunction;
    p_AFunction = nullptr;
}

A::AFunction *A::getfunction() {
    return p_AFunction;
}

// Nested class A::AFunction member function implementations

int A::AFunction::getstream() {
    return 1;
}

// main function

int main() {
    A objA;
    int ret = objA.getfunction()->getstream();
    cout << ret;
    return 0;
}

如果要A::getfunction()函数把return一个函数指针指向classA中的一个成员函数,然后在main函数中调用它,你可以有一个类似这样的实现:

#include <iostream>

using namespace std;

// class A declaration

class A {

public:
    typedef int (A::*AMemberFuncPtr) ();

private:
    AMemberFuncPtr fn_getstream;

public:
    A();
    A::AMemberFuncPtr getfunction();

private:
    int getstream();

}; // class A

// class A member function implementations

A::A() : fn_getstream(&A::getstream) {
}

A::AMemberFuncPtr A::getfunction() {
    return fn_getstream;
}

int A::getstream() {
    return 1;
}

// main function

int main() {
    A objA;
    int ret = (objA.*objA.getfunction())();
    cout << ret;
    return 0;
}

另请参阅 Function pointer to member function 的答案。