Указатели Enum в C ++ - PullRequest
       2

Указатели Enum в C ++

0 голосов
/ 19 марта 2012

Enum:

    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
    {
      // ...
    }

Вопрос:

Как я могу сравнить эти типы или хотя бы привести их к одному и тому же типу данных?

Ответы [ 4 ]

4 голосов
/ 19 марта 2012

Этот API выглядит так, как будто он призван вызываться несколько проще, чтобы избежать динамического выделения памяти, которую вам нужно очистить позже. Просто поместите переменную в стек, и она будет очищена автоматически;

IDataHandler::DataStatus status;

GetDataStatusByFrame(1, &status);

if (status == IDataHandler::DataStatus::DataNotAvailable) // 'cannot convert' exception
{
  // ...
}
3 голосов
/ 19 марта 2012
if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable)
{
    //...
}
3 голосов
/ 19 марта 2012

Использование

if (*pinnedPointer == IDataHandler::DataStatus::DataNotAvailable)
1 голос
/ 19 марта 2012

Нужно ли выделение?Почему бы не сделать следующее вместо этого?

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

Очень редко можно выделить указатель enum.Обычно вы передаете адрес статически распределенной переменной.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...