将枚举传递给重载函数
Passing enum to overload function
我试图将一个基本上是字节的枚举传递给重载解析,但它不起作用。
以下是枚举:
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));
}
如果你要取一个枚举,就取一个enum。
上面采用任何枚举,并执行getn
。
通过一点重构,您可以将对getn
的所有调用及其不安全的强制转换移到一个函数中。
您有一个强类型枚举,它们的全部意义在于它们不能隐式转换,并且可以具有作用域。你可以做三件事中的一件:
- 为您的类型创建重载:
void copy_out(WriteOp& v) { getn((char*) &v, 1); }
- 显式强制转换枚举
copy_out(&(uint8_t)my_enum);
- 使用标准枚举
enum WriteOp {
kAdd = 0,
kDelete
};
相关文章:
- 为什么这个运算符<重载函数对 STL 算法不可见?
- 可以打印矢量和矢量中的矢量的非重载C++函数
- 错误 没有与参数列表匹配的重载函数"getline"实例
- 使用模板重载函数
- C++线程中,没有重载函数接受 X 参数
- std::vector 没有重载函数的实例与参数列表匹配
- C++重载函数,一个采用基类的参数,另一个采用派生类的参数
- 错误:无法解析对重载函数的引用;你的意思是调用它吗?
- 对重载函数find_first_not_of的不明确调用
- 如何从重载解析中删除重载函数?
- CUDA:重载函数"isnan"的多个实例
- C++派生类重载函数(带有 std::function 参数)不可见
- 避免在人为的重载函数调用中拼写出类型
- C++:如何为多个重载函数保留通用代码路径?
- 什么时候可以使用常量装饰调用我的重载函数?
- 尝试使用谓词函数会导致错误:"std::sort"未找到匹配的重载函数
- std::调用,未找到匹配的重载函数
- 为什么在传递长整型时调用具有两个双精度类型的参数的重载函数?
- 为什么使用不匹配的参数调用重载函数仍然有效
- 如何通过签名作为模板参数来解决重载函数?