c++ - 无法通过函数指针c++执行类函数

标签 c++ function class pointers

这可能是迟钝的,我已经搜索并尝试了很多解决方案,但我总是会出错。

class mainStateMachine;
typedef void (mainStateMachine::*StateProc)( EIndication input); 

class mainStateMachine
    {    
        public:
            StateProc currentState;
            int transition;
            void rotateUntilBlobsFound    ( EIndication input); 
          void clarifyImage             (EIndication input); 
        }

然后:

main()
{
    int input=0;
    StateProc BLA;
    mainStateMachine mainMachine;
    mainMachine.currentState=&mainStateMachine::rotateUntilBlobsFound; 

    BLA=mainMachine.currentState;

    BLA(input);
}

由于某种原因这不起作用,告诉我“必须使用'.'或'->'来调用'BLA(...)中的指向成员函数的指针”但即使我做 *BLA(input);它不起作用。 我真的不明白为什么这不起作用。

最佳答案

BLA 需要一个指向实例的指针,因为成员函数指针本身不能直接取消引用(调用它们的函数)。它们必须代表某个对象被调用,然后提供“this”指针供成员函数使用。如果函数不知道它在哪个对象上操作,您还可以做些什么来影响对象实现。

所以这就是您如何调用分配给 BLA 的方法:

(mainMachine.*BLA)( input);

您还可以考虑 boost::functionstd::function 而不是原始指针以简化操作,例如:

std::function< void(const mainStateMachine&, EIndication)> f_ptr = 
                                           &mainMachine::rotateUntilBlobsFound;
    const mainStateMachine foo;
    f_ptr( foo, EIndication());

example

关于c++ - 无法通过函数指针c++执行类函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24231725/

相关文章:

function - 在 ipairs() 中使用函数时,LÖVE 崩溃

Javascript 实现困境 : looking for a class with method overriding solution

java - Java 中的自实例化

c++ - 定义指向私有(private)继承函数的成员函数指针

c++ - 使用 'goto' 时是否清除了所有内容?

c++ - Qt C++ - 如何将数据从工作线程传递到主线程?

c++ - 在 C++ 上使用 vector<vector<int>> 读取错误的矩阵

c - 如何返回字符数组?

c - 将数据类型分配给用户定义的函数

file - 大型 clojure 项目是如何组织的?