c++ - C++ 中的成员函数指针

标签 c++ winapi callback function-pointers

我正在尝试从两个成员函数之一中检索 bool 值。我想调用一个成员函数 (main),它将根据传递给 main 的值指向两个成员函数之一……这是我目前所拥有的:

    class CRoutine{

    ...
    BOOL (*MainRoutine(BOOL opcode))();
    static BOOL SubRoutine1();
    static BOOL SubRoutine2();
    ...
    };

    BOOL (*CRoutine::MainRoutine(BOOL opcode))()
    {   
        switch ( opcode )
        {
        case false:
            MessageBox(NULL, L"Routine1", L"Routine1", MB_OK);
            return &CRoutine::SubRoutine1;
        case true:
            MessageBox(NULL, L"Routine2", L"Routine2", MB_OK);
            return &CRoutine::SubRoutine2;
        default:
            MessageBox(NULL, L"Default Routine Selected", L"Routine1", MB_OK);
            return &CRoutine::SubRoutine1;
        }
    }

    BOOL CRoutine::SubRoutine1()
    {
        MessageBox(NULL, L"Routine1", L"Routine1", MB_OK);
        return true;
    }
    BOOL CRoutine::SubRoutine2()
    {
        MessageBox(NULL, L"Routine2", L"Routine2", MB_OK);
        return false;
    }

    winMain(...)
    {
    ...
 m_routine = new CRoutine();
    BOOL result = m_routine->MainRoutine(0);
    ...
    }

我的问题是:

如何调用 MainRoutine() 以便从 SubRoutine1() 或 SubRoutine2() 获取 bool 值。当我按原样运行程序时,出现以下错误:

错误 C2440:“正在初始化”:无法从“BOOL (__cdecl *)(void)”转换为“BOOL”

这主要是我感兴趣的理论,我知道还有其他方法可以获得如此简单的答案...提前致谢。

最佳答案

像这样:

BOOL result = m_routine->MainRoutine(0)();

因为你从MainRoutine(0)返回函数指针,所以你需要另外一对括号来调用它所指向的函数。


顺便说一句,你返回的是普通函数指针,而不是成员函数指针。

关于c++ - C++ 中的成员函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9709858/

相关文章:

winapi - 如何列出 NTFS 文件系统上的所有符号链接(symbolic link)

c++ - 如何打印出 C++ 映射值?

c++ - 使用 c++ 中的 win api 获取事件查看器日志

c++ - QHttp 示例 qt 4.4.3 的问题

delphi - 将 SID 转换为名称

Javascript:WAITING循环中的函数在下一次迭代之前完成执行

ios - 从谷歌地图回调到我的应用程序

javascript - 填充位于回调函数范围之外的数组

c++ - 使用结构和类时在 C++ 中无效使用 'void'

C++推断嵌套异常的类型