隐式模板方法实例化

时间:2011-08-03 09:50:29

标签: c++ templates instantiation implicit

我有一个包含带有非类型模板参数的模板方法的类。代码大小非常大,所以我尝试通过将其放入.cpp文件来避免内联。但我只能设法为每个非类型参数明确地实例化它。

隐式实例化是否可行?它会是什么样子?在另一个相关的问题中,提供了这个链接http://www.parashift.com/c++-faq-lite/templates.html,但我找不到隐式实例化的解决方案(如果有这样的东西)......

class Example
{
  public: 
    template<enumExample T_ENUM> void Foo(void);
};

使用它时,我会收到Foo(未解析的外部符号)的链接器错误。

3 个答案:

答案 0 :(得分:2)

您的问题是模板代码需要在实例化时显示。见C++ FAQ 35.13

这基本上意味着你不能做你想做的事。有一个导出关键字使这成为可能,但它支持得很差,我相信已从C ++ 0x中的标准中删除。有关详细信息,请参阅C++ FAQ 35.14

答案 1 :(得分:1)

对于隐式实例化,编译器需要查看函数模板的实现。通常这意味着实现需要在头文件中。如果你只是想避免内联,你可以尝试在标题中编写函数模板的实现,但是在类声明之外(虽然我不确定内联是你真正的问题)。

答案 2 :(得分:0)

要减少代码大小,您可以尝试在适当时实施pimpl idiom来减少依赖项。