c++ - 指向成员模板类的指针

标签 c++

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/

相关文章:

c++ - 如何在 Visual Studio 10 中生成自定义生成错误

c++ - 如何使映射键具有两种不同的数据类型?

c++ - 如何使用条件预处理器排除以下代码

c++ - 当源 obj 被销毁时,使用 move cstor 是否会丢失内存?

c++ - 不使用霍夫圆检测圆

创建其构造函数引用全局变量的类的全局实例时,c++程序崩溃

c++ - 数组上的多线程/这里需要锁定机制吗?

c++ - 什么是C++中的简单图形库?

C++ SSO:如何以编程方式查找是否使用短字符串优化分配了 std::wstring?

c++ - 如何优化默认的 if-branch