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'定义'? –
为什么你将指针指向成员函数?如果他们真的是正确的类型,这是没有必要的。 –
void execute(RequestEvent * pEvt,Device * pDev,Alarm_DataType&data)是标题。 pDev是具有所有字段(包括警报)的设备。 AbstractAlarmField是AlarmField的抽象类。 AlarmFields是模板,因此在从集合中获取字段时无法实例化,因为我试图将其转换为Abstract类 – user1977398