2014-09-03 44 views
5

我们正在创建一套使用公共API的库,供不同的第三方使用。有些库是纯C的,所以显然它们有一个C风格的头文件,包含函数和结构体定义以及相应的库。他们都还好。有些库是用适度复杂的C++(针对较老的编译器)编写的,因此我们实现了某种形式的着名pimpl习语。这也没关系。如何使用模板实现发布头文件?

另一方面,头文件的一个重要部分是使用大量模板化代码的C++。知道Why can templates only be implemented in the header file?,但也不愿意透露过多的实施细节给眼睛谁不应该看到他们我们已经严重重构他们排除尽可能多的内部细节,只有真正必要的位...并且仍然有一个重要的剩余的代码量。

所以它困惑我:是否有一个首选的方式分发主要包含模板的头文件?那里有什么好的做法,最好的方法和技巧和窍门?

+2

我不认为在这个问题上有一个强大的治疗。 – 101010 2014-09-03 12:06:50

回答

4

看看你的C++编译器的头文件,以获取灵感。标准的C++库充满了模板,你通常会在头文件中找到所有的模板代码。话虽如此,如果特定的模板是用于少量可能的类(或值)作为模板参数,您可以选择在库本身中显式实例化模板,只留下裸模板声明在头文件中可见。

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