繁体   English   中英

将强类型枚举传递给函数

[英]Pass strongly typed enum to function

我有强类型的枚举。

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枚举?

C ++类型系统的目的是帮助疲倦的ADHA程序员不要混淆布尔值和裤子。 (或在本例中为CustomCommand和char)

您必须尝试尽可能长时间传递枚举“对象”,并且仅在使用的最后一点进行转换。 例如,您可以重载print_byte函数:

void print_byte(CustomCommand  cmd)
 {
     std::cout << static_cast<unsigned char>(cmd);
 };

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM