如何发布具有模板实现的头文件?

5
我们正在创建一组带有公共API的库,这些库将由不同的第三方使用。其中一些库是纯C的,因此它们具有C风格的头文件,包括函数和结构定义以及相应的库。这些都没问题。
另一些库使用了中等复杂度的C++(针对较旧的编译器),因此我们实现了某种形式的著名pimpl惯用语法。这也没问题。
另一方面,重要部分的头文件是C++,使用了大量模板化代码。虽然知道为什么模板只能在头文件中实现?,但也不愿意向不应该看到它们的人透露太多的实现细节,因此我们进行了大量的重构,尽可能地排除了内部细节,只保留了真正必要的部分...但仍然有相当数量的代码剩余。
所以我感到困惑:是否有首选的分发大量包含模板的头文件的方法?有哪些最佳实践、最佳方法、技巧和窍门?

1个回答

4
看一下你的C++编译器头文件,寻找灵感。标准C++库充满了模板,通常你会在头文件中找到所有的模板代码。
话虽如此,如果特定的模板仅适用于少量可能的类(或值)作为模板参数,你可以选择在库内显式实例化模板,只保留头文件中的裸模板声明。
以一个更简单的C++11之前的场景为例,一个C++库通常只为std::basic_string<char>std::basic_string<wchar_t>提供std::basic_string实现;并将一堆模板代码留在库内,只有一个裸的std::basic_string模板声明在头文件中可见。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接