我有一些 C++ 类,我想用它们制作一个静态库。其中一个类是哈希表类,它使用其他两个来创建对象。我已经尝试在另一个问题的答案中进行另一个小演示,但是我生成的库似乎没有定义我在测试程序中编写的任何内容。我已经在单个文件中尝试了所有声明和实现,并将其分成标题/源代码,但安排似乎并不重要。如何将我的类放入静态 libHash.a?
问问题
543 次
2 回答
4
于 2012-05-05T01:05:04.530 回答
1
您可以将模板实例化放在库中,但模板必须位于标头中。如果您事先知道要实例化模板的哪些特化,那么您可以在头文件中声明显式实例化,然后在.cpp
编译并放入.a
// hash.h
template<typename T> struct Hash { };
// declare explicit instantiation
extern template class Hash<int>;
// Hash.cpp
#include <Hash.h>
// define explicit instantiation
template class Hash<int>;
但是对于您无法提前知道的实例化(例如Hash<SomeOtherPersonsType>
),您无法对其进行实例化,因此无法将其放入库中。
于 2012-05-06T17:56:37.583 回答