AbstractFieldCollection是hardwareMissingAlarm等的基类。 hardwareMissingAlarm 属于另一个模板类。
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::hardwareMissingAlarm);
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::hardwareErrorAlarm);
alarmFieldCollection.push_back((AbstractAlarmField Device::*) &Device::badConfigAlarm);``
然后在另一个函数中,我正在读取这样的 vector :
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
是属于类 AbstractAlarmField
的方法。
提前致谢。
最佳答案
您几乎没有提供任何代码,但看起来您是按值存储抽象对象,而不是按引用或指针。这可能会导致对象切片和任何类型的内存问题。尝试使用 AbstractAlarmField&
作为 Device
字段的类型。
关于c++ - 指向成员模板类的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14319748/