Szy*_*zak 1 c++ templates typename reinterpret-cast
这是我的转换器到字节数组(向量).
template<typename T>
void put(T value) {
int size = sizeof(value);
uint8_t *array;
array = reinterpret_cast<uint8_t *>(&value);
if (littleEndian) {
for (int i = 0; i < size; i++) {
arr.push_back(array[i]);
}
} else {
for (int i = size - 1; i >= 0; i--) {
arr.push_back(array[i]);
}
}
}
Run Code Online (Sandbox Code Playgroud)
如您所见,此函数接受所有变量类型.是否可以过滤类型名称?我想只允许uint8_t, int8_t, uint16_t, int16_t etc. + float and double too吗?我不想做10个if陈述,因为它看起来不干净.
你可以使用std::is_integral和SFINAE 这样做.如果类型不是整数类型,这将删除模板.它看起来像
template<typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
void put(T value)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
如果您想要允许所有积分和浮点类型,那么您可以使用std::is_arithmeticlike
template<typename T, typename std::enable_if<std::is_arithmetic<T>::value>::type* = nullptr>
void put(T value)
{
// code
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
99 次 |
| 最近记录: |