我试图通过函数的地址调用另一个类的函数。 我有两个类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的所有者。
请有人帮我解决这个问题。
答案 0 :(得分:2)
你所拥有的那条线并没有调用任何东西,它只是给出了函数的地址。指向成员函数并调用它的指针在C ++中是这样的:
void (CA::*func_pointer)() = &CA::CreateList;
CA a;
a->*func_pointer();
是的,语法是延迟的,曾经有一段时间我记得我桌面上Stroustrup中的页面讨论了这个功能,因为我必须经常查找它(基本上每次我都使用它)。
但是我离题了 - 我应该提到的是,2014年你真的不应该再使用它了;使用一个信号/插槽,为你抽象出来。
此外,我从您的示例中不确定CB应该如何访问CA的实例,以及CA是集装箱船中CB的所有者。'装置