将强类型枚举传递给函数

Pass strongly typed enum to function

本文关键字:函数 强类型 枚举      更新时间:2023-10-16

我得到了强类型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);
 };