C++中的枚举指针

Enum pointers in C++

本文关键字:指针 枚举 C++      更新时间:2023-10-16

枚举:

    enum DataStatus
    {
        DataNotAvailable = -1,
        DataLocallyAvailable = 0,
        DataExternallyAvailable = 1,
    };

功能定义:

    GetDataStatusByFrame(UINT PI_uiRequestFrameNo, DataStatus *PO_peDataStatus);

对比:

    IDataHandler::DataStatus* pinnedPointer = new IDataHandler::DataStatus();
    GetDataStatusByFrame(1, pinnedPointer);
    if (pinnedPointer == IDataHandler::DataStatus::DataNotAvailable) // 'cannot convert' exception
    {
      // ...
    }

问题:

如何比较这些类型,或者至少将它们强制转换为相同的数据类型

这个API看起来是以一种稍微简单的方式调用的,以避免动态分配以后需要清理的内存。只需将变量放在堆栈上,它就会自动清理;

IDataHandler::DataStatus status;
GetDataStatusByFrame(1, &status);
if (status == IDataHandler::DataStatus::DataNotAvailable) // 'cannot convert' exception
{
  // ...
}

使用

if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable)
if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable)
{
    //...
}

是否需要分配?为什么不改为执行以下操作?

IDataHandler::DataStatus status;
GetDataStatusByFrame(1, &status);
if (status == IDataHandler::DataStatus::DataNotAvailable) {
    // ...
}

分配给enum指针的情况非常罕见。通常传递静态分配的变量的地址。