c++ - 如何编写和打包使用模板的 C++ 库
问题描述
由于模板必须在头文件中定义/实现,鉴于我们不想共享源代码,我们如何打包这样的库?
解决方案
您可以转发声明模板特化并将它们从您的 dll 中导出,但仅限于一组特定的类型。
一种替代方法是利用类型擦除。在这里,您的公共标头是模板化的,但它们会转换为非模板代码。
例如,您可以编写一个以极其灵活的格式进行图像处理的库。用户提供通道的位深度、含义和顺序(加法、线性、多透明度等)。
您存储通道信息并创建一个字节的平面缓冲区,并且在库构建中有足够的 stufd 来处理所有组合,而无需使用模板“跨越 ABI”。
这可能会变得非常极端。例如,Skia 有着色器,在运行时您可以提供 SkSL 字符串,它交叉编译到您选择的基于 GPU 或 CPU 的图像处理,然后生成可执行代码,在缓冲区上运行、优化。Skia 不允许自定义缓冲区布局,但没有什么能从根本上阻止它。
所有这些都是先进而晦涩的。最简单的模板库只是标题,可能带有非模板代码的内核。
推荐阅读
- java - 为什么我的 Java 代码更改在从命令行运行但在 Eclipse 中工作时没有反映?
- tensorflow2.0 - 调整图像大小并为 tensorflow 2 数据集创建 tfexample 导致错误
- reactjs - 从切片访问全局状态
- image - 如何在 dart 中引用文件?
- reactjs - React - 在单个文件中导入多个 svg
- javascript - 在 discord.js 中回复消息的嵌入
- swift - swift - 链接 UIView 动画
- c# - 使用onclick函数和ajax上传图像文件?
- html - 相关下拉最后一级关系不起作用
- c# - 未涵盖 C# 8.0 单元测试开关表达式