有没有一种方法可以将枚举类隐式转换为std :: byte?

Tar*_*Tar 2 c++ c++17

我有以下功能:

uint_fast32_t write(const std::vector<std::byte>& bytes_to_write) const
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

我想用可变数量std::bytes 来称呼它:

std::byte low_byte { 0 };
std::byte hi_byte{ GPIO_PINS::GPIOH0 | GPIO_PINS::GPIOH3 };

write({
    INST::SET_LOW,
    low_byte,
    0xFB,
    INST::SET_HI,
    hi_byte,
    0xFF
    });
Run Code Online (Sandbox Code Playgroud)

INSTGPIO_PINSenum class : byte-介意的区别byte(实际上unsigned char),并std::byte在这方面。)

但这不会编译。我必须按以下方式调整通话:

write({
    std::byte(INST::SET_LOW),
    low_byte,
    std::byte(0xFB),
    std::byte(INST::SET_HI),
    hi_byte,
    std::byte(0xFF)
    });
Run Code Online (Sandbox Code Playgroud)

我的问题是,是否有一种方法可以消除对std::byte构造函数(或static_cast)的需求?

也许一些隐式操作符重载或类似?

Jes*_*uhl 6

“有没有办法将枚举类隐式转换为std :: byte?” -不

类型安全的枚举不允许隐式转换为其他类型。您必须使用演员表。

另请参阅:https : //en.cppreference.com/w/cpp/language/enum

  • @YSC“否(无法完成)”看起来如何?如果做不到,那做对我来说似乎就是事实。 (5认同)
  • @SergeyA什么是*什么和*看起来*之间存在固有的差异。就您而言,对我而言,正如我们从杰斯珀的经验中所知,这是事实。对于一个不喜欢OP的人,这可能两者兼而有之。[_“事实是可以检查并有证据支持的东西。” _](http://www.bbc.co.uk/skillswise/factsheet/en06opin-l1-f-what-is-fact-and -意见)。由于Jesper的声明可以得到证据的支持,因此我请他这样做。那是怎么了 (3认同)
  • @YSC:“ *因为Jesper的声明可以得到证据的支持,所以我要求他这样做。*”不,您没有。您问“您能否详细说明或将您的回答转化为评论?” 如果您希望他引用标准或以其他方式提供证据,则应该明确要求。您说的是“精心”,这实际上意味着任何意义。 (2认同)