隐式模板方法实例化

implicit template method instantion

本文关键字:实例化 模板方法      更新时间:2023-10-16

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

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

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

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

您的问题是模板代码需要在实例化时可见。参见c++ FAQ 35.13

这基本上意味着你不能做你想做的。有一个export关键字可以实现这一点,但它的支持非常差,我相信在c++ 0x中已经从标准中删除了。

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

为了减少代码的大小,您可以尝试通过在适当的时候实现pimpl习惯用法来减少依赖关系。