当前位置: 首页 > article >正文

csv-parser在C++17下from_chars函数问题

前言:

哎!c++碎片化,真是麻烦!
我win下vs2017的C++17没问题.
linux下 g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0有问题.即使c++17
这就牵扯到各家编译时实现的不同.
 

解决办法:

参考我的
https://github.com/vincentlaucsb/csv-parser/issues/257#issuecomment-2642703294

C++17的std::from_chars最初只支持整数类型,比如int、long等,而对浮点数类型的支持是在C++20中添加的。所以可能在C++17中,确实没有针对浮点数的from_chars函数,导致编译器找不到对应的重载版本,从而报错。
用这个函数代替原先的get_max函数

long double get_max(std::string file, std::string column, bool use_std = false);


long double get_max(std::string file, std::string column, bool use_std) {
    using namespace csv;
    long double max = -std::numeric_limits<long double>::infinity();
    CSVReader reader(file);

    for (auto& row : reader) {
        auto field = row[column];
        long double out = 0;

        if (use_std) {
            auto _field = field.get<std::string_view>();
            const char* data = _field.data();
            char* end;
            errno = 0; // 重置错误标志
            out = std::strtold(data, &end);
            
            // 检查转换是否成功
            if (data == end) {
                // 没有数字被转换,处理错误
                std::cerr << "转换失败: '" << _field << "'" << std::endl;
                continue; // 跳过当前行
            } else if (errno == ERANGE) {
                // 处理溢出情况
                if (out == HUGE_VALL) {
                    out = std::numeric_limits<long double>::infinity();
                } else if (out == -HUGE_VALL) {
                    out = -std::numeric_limits<long double>::infinity();
                }
            }
        } else {
            out = field.get<long double>();
        }

        if (out > max) {
            max = out;
        }
    }

    return max;
}


http://www.kler.cn/a/537372.html

相关文章:

  • 自动驾驶---聊聊传统规控和端到端
  • 利用 IMU 估计人体关节轴向和位置 —— 论文推导
  • VsCode创建VUE项目
  • mysql的cpu使用率100%问题排查
  • DeepSeek与llama本地部署(含WebUI)
  • web直播弹幕抓取分析 signature
  • 【GitLab CI/CD 实践】从 0 到 1 搭建高效自动化部署流程
  • Git命令缩写配置(git命令设置别名)
  • DFX(Design for eXcellence)架构设计全解析:理论、实战、案例与面试指南*
  • enableEdgeToEdge
  • 深度分析:网站快速收录与网站内容多样性的关系
  • java程序员面试自身优缺点,详细说明
  • Git命令的复习
  • SpringAI系列 - 使用LangGPT编写高质量的Prompt
  • NodeList 对象
  • Java-序列化
  • BUU24 [GXYCTF2019]BabyUpload 1
  • qt6.8安装mysql8.0驱动
  • PostgreSQL-字符串函数
  • 【算法】动态规划专题⑦ —— 多重背包问题 + 二进制分解优化 python
  • 解决 ssh: connect to host github.com port 22: Connection timed out
  • TLS 和 SSL区别
  • 科技资讯杂志科技资讯杂志社科技资讯编辑部2024年第24期目录
  • 记一次golang环境的变化
  • OpenFeign远程调用返回的是List<T>类型的数据
  • git怎么查看提交的历史