微软有一个扩展,可以声明模板实例化是外部的;因此,它不会被隐式实例化。至少理论是这样的。我尝试用代码复制它
#include <vector>
class Foo{
int i;
public:
virtual ~Foo();
};
extern template class std::vector<Foo>;
这给了我
warning C4231: nonstandard extension used : 'extern' before template
explicit instantiation
但是,似乎没有其他任何事情发生:程序继续链接查找,即使我使用 push_back (并且 dumpbin 显示 push_back 已实例化)。
只有当我宣布
extern template void std::vector<Foo>::push_back(const Foo&);
正如预期的那样,我得到一个链接器错误。
那么:如何将整个实例化(所有成员)声明为显式,防止隐式实例化?