![](/img/trans.png)
[英]How to write a makefile for a C++ project which uses Eigen, the C++ template library for linear algebra?
[英]How to write and package a C++ library which uses templates
由於必須在 header 文件中定義/實現模板,我們 go 鑒於我們不想共享源代碼,我們如何打包這樣的庫?
您可以轉發聲明模板專業化並從您的 dll 導出它們,但僅限於一組特定的類型。
一種替代方法是利用類型擦除。 在這里,您的公共標頭是模板化的,但它們會轉換為非模板代碼。
例如,您可以編寫一個庫來對極其靈活的格式進行圖像處理。 用戶提供位深度以及通道的含義和順序(加法、線性、多重透明度等)。
您存儲通道信息並創建字節的平面緩沖區,並且在庫構建內部有足夠的 stufd 來處理所有組合,而無需使用模板“交叉 ABI”。
這可能會變得荒謬極端。 例如,Skia 有着色器,您可以在運行時提供 SkSL 字符串,它可以交叉編譯為您選擇的 GPU 或基於 CPU 的圖像處理,然后生成可執行代碼,在緩沖區上運行、優化。 Skia 不允許自定義緩沖區布局,但沒有什么可以從根本上阻止它。
所有這些都是先進而晦澀的。 最簡單的模板庫只有 header,可能還有 kernel 的非模板代碼。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.