我们正在创建一组带有公共API的库,供不同的第三方使用。有些库是纯C,所以显然它们有一个带有函数和结构定义的C样式头以及相应的库。他们没事。
一些库是使用中等复杂的C ++(针对较旧的编译器)编写的,因此我们已经实现了某种形式的着名的pimpl习语。这也没关系。
另一方面,头文件的很大一部分是C ++使用模板化程度很高的代码。知道Why can templates only be implemented in the header file?但也不愿意向那些不应该看到它们的人透露过多的实现细节我们已经大量重构它们以尽可能多地排除内部细节并且只有真正必要的位......然后仍然是一大堆代码。
所以它让我感到困惑:是否有一种首选方式来分发主要包含模板的头文件?有哪些好的做法,最好的方法,技巧和窍门?
答案 0 :(得分:4)
查看C ++编译器的头文件,获取灵感。标准C ++库中充满了模板,您通常会在标题中找到所有模板代码。
话虽如此,如果要将特定模板与少量可能的类(或值)一起用作模板参数,您可以选择在库本身内显式实例化模板,只留下裸模板声明在头文件中可见。
使用更简单的pre-C ++ 11场景作为示例,C ++库通常只为std::basic_string
和std::basic_string<char>
提供std::basic_string<wchar_t>
实现。并在库本身中留下一堆模板代码,只有一个裸std::basic_string
模板声明在头文件中可见。