C++ 在C++;
这是我的字节数组(向量)转换器C++ 在C++;,c++,templates,reinterpret-cast,typename,C++,Templates,Reinterpret Cast,Typename,这是我的字节数组(向量)转换器 模板 无效认沽权(T值){ int size=sizeof(值); uint8_t*阵列; 数组=重新解释强制转换(&U)值; 如果(小印度){ 对于(int i=0;i=0;i--){ arr.push_-back(数组[i]); } } } 如您所见,此函数接受所有变量类型。是否可以筛选类型名?例如,我只想允许uint8\u t、int8\u t、uint16\u t、int16\u t等+浮点和双精度?我不想做10个if语句,因为它看起来不干净。您可以使用
模板
无效认沽权(T值){
int size=sizeof(值);
uint8_t*阵列;
数组=重新解释强制转换(&U)值;
如果(小印度){
对于(int i=0;i=0;i--){
arr.push_-back(数组[i]);
}
}
}
如您所见,此函数接受所有变量类型。是否可以筛选类型名?例如,我只想允许uint8\u t、int8\u t、uint16\u t、int16\u t等+浮点和双精度
?我不想做10个if
语句,因为它看起来不干净。您可以使用和SFINAE来实现这一点。如果该类型不是整数类型,这将从考虑中删除该模板。看起来像
template<typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
void put(T value)
{
// code
}
您可以使用和SFINAE来完成此操作。如果该类型不是整数类型,这将从考虑中删除该模板。看起来像
template<typename T, typename std::enable_if<std::is_integral<T>::value>::type* = nullptr>
void put(T value)
{
// code
}
看起来您需要一个只接受任何积分类型的函数 标头中已调用该un的现有类型特征。您可以将其与
std::enable_if
一起使用,以生成预期的约束:
template<typename T, std::enable_if_t<std::is_integral<T>::value, int> = 0>
void put(T value) {
constexpr 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]);
}
}
}
模板
无效认沽权(T值){
constexpr int size=sizeof(值);
uint8_t*阵列;
数组=重新解释强制转换(&U)值;
如果(小印度){
对于(int i=0;i=0;i--){
arr.push_-back(数组[i]);
}
}
}
您的函数现在不能用非整数类型调用
请注意,如果函数有另一个重载,编译器也会尝试它。这意味着,如果您有另一个接受任何浮点类型的函数,编译器将选择适当的重载。似乎您需要一个只接受任何整数类型的函数 标头中已调用该un的现有类型特征。您可以将其与
std::enable_if
一起使用,以生成预期的约束:
template<typename T, std::enable_if_t<std::is_integral<T>::value, int> = 0>
void put(T value) {
constexpr 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]);
}
}
}
模板
无效认沽权(T值){
constexpr int size=sizeof(值);
uint8_t*阵列;
数组=重新解释强制转换(&U)值;
如果(小印度){
对于(int i=0;i=0;i--){
arr.push_-back(数组[i]);
}
}
}
您的函数现在不能用非整数类型调用
请注意,如果函数有另一个重载,编译器也会尝试。这意味着,如果您有另一个函数接受任何浮点类型,编译器将选择适当的重载。是否可以添加浮点和双精度?@SzymonMarczak如果您想要整数和浮点类型,那么您需要使用非常感谢:)是否可以添加浮点和双精度?@SzymonMarczak如果您想要整数和浮点类型,那么您需要使用非常感谢:)什么是指向不同语句中的
数组
声明和赋值?指向不同语句中的数组
声明和赋值的点是什么?