`rjk::duck` 是一个 C++26 库,它利用了新的反射功能来简化类型擦除,以简洁、高性能且灵活的语法取代了繁琐的样板代码。 通过使用 `[[=rjk::trait]]` 注解,开发者可以定义一次接口,并让库在编译期自动生成所需的虚函数表(vtables)和适配器。与传统的纯手工类型擦除不同,`rjk::duck` 使用了先进的元编程技术(包括 C++26 的 `define_aggregate` 和拼接运算符)来处理重载解析和接口组合,且不会牺牲性能。 核心实现亮点包括: * **高效分发:** 使用“指针互转(pointer-interconvertibility)”技巧来恢复 `this` 指针,从而保持库极小的内存占用。 * **性能调优:** 允许用户显式地将虚函数表中的特定函数进行内联,以换取更快的执行速度(代价是对象体积增大)。 * **现代化工具:** 专为最前沿技术设计,利用编译器级的反射自动将 trait 成员转换为内部标签和函数指针。 目前该库需要 GCC 编译器并开启 `-std=c++26 -freflection` 选项。`rjk::duck` 展示了编译期反射能够有效取代复杂的手写机制,提供更安全、更符合人体工程学且高度可调的抽象。
由于表演艺术学校强制要求用户必须下载一款臃肿、充斥广告且带有重度追踪功能的应用程序,才能查看基础的行程单,作者决定亲自“修复”这一体验。
作者指出,对于本质上只需通过网页呈现文本、图片和 PDF 的内容,强制用户安装一个 124MB 的应用程序是非常荒谬的。在通过拦截网络流量对该应用进行逆向工程后,作者发现该应用仅仅是通过获取 JSON 数据来显示信息,而这些信息完全可以轻松地部署在标准网页上。
由于无法忍受该应用的反用户功能——特别是数据追踪和不受欢迎的“励志”广告,作者编写了一个简单的 Ruby 脚本来抓取行程数据。随后,作者为所在团队搭建了一个私有、轻量且易于访问的网页。通过绕过该应用程序,作者用一个仅 0.05MB 的网页取代了原本臃肿且侵入性强的工具,该网页不仅支持打印、搜索,还能在任何设备上运行。
作者总结道,虽然某些任务确实需要专门的应用程序,但“应用文化”已经走得太远了,强制用户为那些由开放网络提供服务会更好的内容去安装软件。