cnbatch
V2EX  ›  C++

真是意想不到的操作:有好几个人一起协作向 C++库 fmtlib 加上了 C11 包装接口,确实能用

  •  
  •   cnbatch · 17h 13m ago · 1072 views

    fmtlib就是std::format的前身关联库,早在 C++20 出现前就已经十分受欢迎。

    这个库大量使用可变参数模板特性,想要给“传统”C 语言(指 C99 及之前的版本)做包装可以说是没什么好办法。但 C11 有_Generic,退而求其次妥协一下(指参数的数量限制),起码能用。

    包装接口的源码很简洁,头文件也就两百行上下:
    https://github.com/fmtlib/fmt/blob/main/include/fmt/fmt-c.h

    实现文件更简单,一百行不到:
    https://github.com/fmtlib/fmt/blob/main/src/fmt-c.cc

    Reddit 有人已经试过,由于语言限制,目前似乎只能做到运行期检查
    The {fmt} library has added a C11 interface.

    而且参数的数量也有限制,最多 16 个,毕竟是简单粗暴地把 16 个参数 Macro 全部写出来(至于那些代码是手写还是机器生成的,天知道)

    虽然不是很优雅,但至少能覆盖大部份用途了

    No Comments Yet
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2705 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 15:23 · PVG 23:23 · LAX 08:23 · JFK 11:23
    ♥ Do have faith in what you're doing.