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函数

cpp 复制代码
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;
}
相关推荐
ん贤15 分钟前
怎么设计,才算一个优秀审计模块
大数据·开发语言·设计·审计
l1t22 分钟前
测试用rust重写的postgresql: pgrust
开发语言·postgresql·rust
2501_9481069124 分钟前
计算机毕业设计之jsp-智慧旅游分享平台
java·开发语言·spark·汽车·课程设计·旅游
阿里云云原生43 分钟前
Agent 不再是“玩具”!AgentScope Java 2.0 GA 发布:构建企业级分布式智能体底座
java·开发语言·分布式·agentscope
BIM云平台开发1 小时前
【App.vue里跟踪页面跳转和用户ID】
开发语言·前端·javascript
NiceCloud喜云1 小时前
ClaudeAPI 接入 n8n / Dify / Open WebUI 实战:Base URL 配置、调用示例与排错
开发语言·ai·chatgpt·aigc
小保CPP1 小时前
OCR C++ Tesseract基础用法
c++·人工智能·ocr·模式识别·光学字符识别
庵中十三居士1 小时前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python
TCW11211 小时前
AI底层系列:用C++实现线性代数的公式推导与算法设计-8.线性变化(3)
c++·人工智能·算法
甄同学1 小时前
第二十篇:MCP协议集成,Claude Code如何扩展AI Agent的能力边界
开发语言·人工智能·qt