AbstractFieldCollection是hardwareMissingAlarm等的基类。 hardwareMissingAlarm属于另一个作为模板的类。
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::hardwareMissingAlarm);
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::hardwareErrorAlarm);
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::badConfigAlarm);``
然后在另一个函数中,我按以下方式读取向量:
for(int32_t i=0; i<alarmFieldCollection.size(); i++)
{
AbstractAlarmField Device::* pAF = alarmFieldCollection[i];
std::cout << "isRaised: "<< pDev << std::endl;
if ((pDev->*pAF).isRaised(pContext))
{
.....
}
}
需要注意的是,pDev
是设备对象,但是 pDev->*pAF
返回了 NULL
。实际上,当我打印 &Device::hardwareErrorAlarm
和 &Device::hardwareMissingAlarm
时,结果都为1。我不知道我的错误在哪里。
isRaised
是属于 class AbstractAlarmField
的一个方法。
提前感谢您的帮助。
pDev
是在哪里和如何定义的? - Olaf DietscheAbstractAlarmField
是hardwareMissingAlarm的基类? - Olaf Dietsche