c++ - 如何发布带有模板实现的头文件?

标签 c++ templates header software-distribution

我们正在创建一组具有公共(public) API 的库,供不同的第三方使用。一些库是纯 C 的,所以很明显它们有一个 C 风格的头文件,其中包含函数和结构定义以及相应的库。他们没事。

一些库是使用中等复杂的 C++(针对较旧的编译器)编写的,因此我们实现了某种形式的著名的 pimpl 惯用语。这也可以。

另一方面,头文件的重要部分是使用大量模板化代码的 C++。知乎Why can templates only be implemented in the header file?但也不愿意向不应该看到它们的人透露太多实现细节留下代码。

所以我很困惑:是否有一种首选的方式来分发主要包含模板的头文件?有哪些好的做法、最佳方法以及提示和技巧?

最佳答案

查看 C++ 编译器的头文件以获取灵感。标准 C++ 库充满了模板,您通常会在头文件中找到所有模板代码。

话虽如此,如果特定模板打算与少量可能的类(或值)一起用作模板参数,您确实可以选择在库本身内部显式实例化模板,只留下裸模板声明在头文件中可见。

以更简单的 C++11 之前的场景为例,C++ 库通常会提供 std::basic_string仅实现 std::basic_string<char>std::basic_string<wchar_t> ;并在库本身中留下一堆模板代码,只有一个空的 std::basic_string头文件中可见的模板声明。

关于c++ - 如何发布带有模板实现的头文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25643809/

相关文章:

c++ - C++中的字符串到下/上

c++ - 有没有更惯用的方法来替换指针?

templates - if 语句确定在 jinja 模板、flask 中使用了哪条路由

c - Eclipse C/C++ (CDT) 将文件导入项目 - 找不到头文件 - 包含路径

html - 我无法让我的页眉图片适合页面内容

c++ - 头文件是如何连接到对应的.cpp文件的?

c++ - 使用 C++ 继承的不可访问项

c++ - 概念转换的等价物是什么?

java - Groovy GString 变量双重替换

c++ - 为什么我必须确定重载模板基类方法的范围?