通过其函数地址调用另一个类的函数

时间:2014-07-29 04:16:22

标签: c++ mfc

我试图通过函数的地址调用另一个类的函数。 我有两个类CA和CB

CA有类似

的方法
void CA :: CreateList()
{
    m_pWindow = DEBUG_NEW CA;
    if(! m_pWindow ->Create(_T("CListsdbb"),NULL,WS_CHILD|WS_VISIBLE|LVS_ICON|LVS_SINGLESEL                          , CRect(0, 0, 0, 0), this, NULL))
    {
        TRACE0("Falied to create list window");
        return;
    }
}

m_pWindow是CWnd *类型的CA的属性。

我有另一个班级CB。其中我试图调用此函数 void CreateList();

喜欢

void CB :: OnBtn(void)
{
    &CA::CreateList;
    MessageBox(_T("Hello world"), _T("Information"),  MB_OK);
}

但功能没有调用。 CA是集装箱船上CB的所有者。

请有人帮我解决这个问题。

1 个答案:

答案 0 :(得分:2)

你所拥有的那条线并没有调用任何东西,它只是给出了函数的地址。指向成员函数并调用它的指针在C ++中是这样的:

void (CA::*func_pointer)() = &CA::CreateList;

CA a;
a->*func_pointer();

是的,语法是延迟的,曾经有一段时间我记得我桌面上Stroustrup中的页面讨论了这个功能,因为我必须经常查找它(基本上每次我都使用它)。

但是我离题了 - 我应该提到的是,2014年你真的不应该再使用它了;使用一个信号/插槽,为你抽象出来。

此外,我从您的示例中不确定CB应该如何访问CA的实例,以及CA是集装箱船中CB的所有者。'装置