【问题标题】:How to publish header files with template implementations?如何发布带有模板实现的头文件?
【发布时间】:2014-10-27 22:10:34
【问题描述】:

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

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

另一方面,头文件的重要部分是使用大量模板代码的 C++。知道Why can templates only be implemented in the header file?,但也不愿意向不应该看到它们的人透露太多的实现细节,我们已经对它们进行了大量重构,以排除尽可能多的内部细节,并且只有真正必要的部分......并且仍然存在剩下大量代码。

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

【问题讨论】:

  • 我认为在这个问题上没有强有力的处理方法。

标签: c++ templates header software-distribution


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-01
    • 1970-01-01
    • 2022-09-09
    相关资源
    最近更新 更多