将强类型枚举传递给函数
Pass strongly typed enum to function
我得到了强类型enum。
enum class CustomCommand : unsigned char
{
ENQ = 0x05,
ACK = 0x06,
NAK = 0x15,
};
函数如下:
void print_byte(unsigned char byte)
{
cout << "Byte: " << byte << endl;
}
但是当我调用该函数时,GCC抛出如下错误:
/home/ser/QTProjects/SerialPort/main.cpp:27: error: cannot convert 'CustomCommand' to 'unsigned char' for argument '1' to 'void print_byte(unsigned char)'
print_byte(CustomCommand::ACK);
^
为什么我总是需要手动转换CustomCommand enum时,我给它unsigned char类型?
c++类型系统的目的是帮助疲惫和ADHA程序员不要将bool和pants混在一起。(或者在本例中是CustomCommand和char)
必须尝试尽可能长时间地传递枚举"object",并且只在最后使用时强制类型转换。例如,可以重载print_byte函数:
void print_byte(CustomCommand cmd)
{
std::cout << static_cast<unsigned char>(cmd);
};
相关文章:
- 具有默认模板类型的默认构造函数的类型推导
- 检查函数返回类型是否与STL容器类型值相同
- 警告:在函数返回类型 [-Wignore 限定符] 时忽略类型限定符
- 在 c++ 中将函数返回类型指定为模板参数
- 仅在函数模板中为那些定义了函数的类型执行函数
- 我在 C++ 代码中遇到错误警告:控制到达非空函数 [-Wreturn 类型] 的末尾
- 将函数参数类型声明为 auto
- STL 函数和函数类型与函数指针类型
- 无法将错误分配给成员函数中"类型的实体"
- 通过引用传递参数;函数返回类型是否必须为 VOID?
- LINUX 操作系统上的错误:令牌之前预期的构造函数、析构函数或类型转换'('?
- 如何避免模板函数返回类型重复?
- 专门用于"direct"函数类型(与函数指针类型相对)
- 是否可以确定枚举是否为强类型?
- 将 std::vector::d ata 传递给函数期望类型**(双指针)
- 在编译时将强类型枚举器转换为其基础类型?
- 使用std::conditional中的模板来确定函数参数类型
- 从类型bankAccount的返回值到函数返回类型int没有可行的转换
- 将强类型枚举传递给函数
- 在成员函数的默认参数中使用强类型枚举的成员