c++ - 使用模板在 C++ 中进行类型转换
问题描述
在C++中,有没有办法使用(例如)模板来简化下面的表达式?
std::stringstream data;
if (data_type == types::UINT8) {
uint8_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::UINT16) {
uint16_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::UINT32) {
uint32_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::UINT64) {
uint64_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::INT8) {
int8_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::INT16) {
int16_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::INT32) {
int32_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::INT64) {
int64_t val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else if (data_type == types::FLOAT64) {
double val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
} else {
return false;
};
解决方案
创建一个函数模板来读取:
template<typename T>
void read(std::stringstream& data,TypeOfU& U){
T val;
data.read(reinterpret_cast<char*>(&val), sizeof(val));
U.push_back(val);
}
然后使用switch
:
switch(data_type){
case types::INT64: read<int64_t>(data,u); break;
case types::FLOAT64: read<double>(data,u); break;
// etc.
}
推荐阅读
- python - 为什么我无法通过 Python 使用 requests_html 获取整个页面的内容?
- haskell - 根据其他类型和类型类在 Haskell 中定义类型
- windows - 在 Sublime Text 搜索中排除折叠代码
- python - 将非字符串系列分成多列数据框或
- php - jetstrap laravel 8 错误 al usar bootstrap 4
- python - 如何旋转矩形形状cv2 python
- javascript - 改变矩阵边缘元素
- javascript - 将输入文件转换为 byte[] javascript
- nginx - Nginx 反向代理到路径中指定的服务器
- css - 相对且固定的最大高度