gpt4 book ai didi

c++ - 将枚举传递给重载函数

转载 作者:行者123 更新时间:2023-11-30 01:47:04 31 4
gpt4 key购买 nike

我正在尝试将基本上是一个字节的枚举传递给重载解析,但它不起作用。

这是枚举:

enum class WriteOp : uint8_t {
kAdd = 0,
kDelete
};

这里是重载:

 void copy_out(uint8_t& v) { getn((char*) &v, 1); }
void copy_out(uint16_t& v) { getn((char*) &v, 2); }
void copy_out(uint32_t& v) { getn((char*) &v, 4); }
void copy_out(uint64_t& v) { getn((char*) &v, 8); }

这是我收到的典型错误消息:

main.cpp:164:8: note: candidate function not viable: no known conversion from 'WriteOp' to 'uint8_t &' (aka 'unsigned char &') for 1st argument
void copy_out(uint8_t& v) { getn((char*) &v, 1); }

有什么简单而优雅的方法吗?

最佳答案

template<class E,
std::enable_if_t<std::is_enum<E>{}>* = nullptr
>
void copy_out(E& e){
getn(reinterpret_cast<char*>(&e),sizeof(e));
}

如果你正在接受一个枚举,就接受一个枚举。

以上采用任何枚举,并执行 getn

通过一些重构,您可以将所有对 getn 的调用及其不安全的转换移动到一个函数中。

关于c++ - 将枚举传递给重载函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32105438/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com