Skip to content

[Feature Request] 建议增加 C++17 Header-only 原生支持以提升项目兼容性 #1

@mikami-w

Description

@mikami-w

你好。我最近在关注这个项目,非常喜欢 llmapi 解决了 C++ 中对 LLM API 调用工具的缺失的问题。

现状与痛点
目前项目核心基于 C++23 Modules 实现。这非常前沿,但目前的编译器(如 GCC 13/14, CMake 3.30 以下的版本)对 Modules 的支持在跨平台和工程落地方面仍有门槛,尤其不幸的是,许多长期支持的 Linux 稳定发行版软件包列表中并没有支持import std;这一特性的 gcc-15。许多现有的工业级项目仍锁定在 C++17 标准,无法直接接入。

虽然项目提供了 extern "C" 接口,但使用 C 接口会丢失 C++ 的类型安全和 RAII, std::string_view 等现代化特性。

建议方案
建议提供一套 C++17 Header-only 实现

我注意到核心逻辑(如 openai.cppm)主要依赖 libcurlnlohmann/json,逻辑本身并不强依赖 C++20/23 的独有特性(如 Coroutines)。因此,可以将核心逻辑移植为标准的 C++17 头文件。

这样做的好处是:

  1. 用户可以直接使用 C++ 类和方法,而不需要经过 C 接口的转换。
  2. C++17 用户只需包含头文件并链接 libcurl 即可使用,无需配置复杂的 Modules 编译链 (尤其是在当下用户需要手动编译 std 模块),实现了构建方面的解耦。
  3. 这些头文件的加入是非侵入式的,与现有的 C++23实现 (.cppm 文件) 互不影响。

我已经基于现有的 C++23 源码完成了 C++17 版本的移植(主要工作是将 Modules 语法替换为标准头文件包含,将 Concepts 替换为 SFINAE),并在本地验证通过。稍后我会提交一个 PR,烦请评估。

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions