C++中的枚举指针
Enum pointers in C++
枚举:
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
指针的情况非常罕见。通常传递静态分配的变量的地址。
相关文章:
- 不带大括号的枚举形式
- 枚举环境变量的惯用C++14/C++17方法
- C++ 指向枚举数组的指针
- 错误:表达式必须具有算术、无作用域枚举或带有运算符重载的指针类型
- 为什么允许将整型、枚举和指向成员的指针类型reinterpret_cast到自身?
- 将指向类型化/大小的枚举的指针转换为指向基础类型的指针是否安全?
- 扩展 std::to_string 以支持枚举和指针
- 定义基于模板的映射指针,以便在验证范围时将 int 解析为枚举
- 如何将指针值强制转换为枚举
- 使用C++中的函数指针映射枚举键和值
- 如何将 size_t 类型的指针转换为枚举指针
- 枚举指针的值丢失
- C++中的枚举指针
- 枚举指针是否可以指向常数值
- 我的类包含 1 个枚举、2 个 int 和一个指针。它没有虚函数,但测量 20 字节。为什么?
- 为什么不能通过指针将 C++11 强类型枚举强制转换为基础类型?
- 表达式在指针上必须具有整型或非整型枚举类型
- C中的指针和枚举
- 这个 C++ [out] 参数是指向枚举的指针,还是只是一个值
- 是否可以将指向类的指针用作枚举常量?