【发布时间】:2015-08-20 05:24:20
【问题描述】:
我正在尝试将一个基本上是一个字节的枚举传递给重载决议,但它不起作用。
这里是枚举:
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); }
有什么简单而优雅的方法吗?
【问题讨论】:
-
使 WriteOp 重载?
-
你有一个强类型枚举,这样做的目的是使它成为一个不同的类型(即不隐式转换)。您应该强制转换或重载。
-
enum class的一个特殊功能是它不能隐式转换。如果需要,请使用普通的enum。 -
@Frank 您必须明确地将作用域枚举数转换为所需的类型。
-
“我正在尝试传递一个枚举” 不,你不是。 “这基本上是一个字节” 不,它不是。