传递强类型枚举功能

时间:2016-11-10 04:55:38

标签: c++ c++11 enums

我有强烈的类型枚举。

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);
                                  ^

为什么当我给它unsigned char类型时,我总是需要手动转换CustomCommand枚举?

1 个答案:

答案 0 :(得分:2)

c ++类型系统的目的是帮助厌倦和ADHA程序员不要混合bool和裤子。 (或者在本例中为CustomCommand和char)

你必须尝试传递enum&#34;对象&#34;尽可能长的时间,并在最后使用点投下。 作为示例,您可以重载print_byte函数:

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