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