隐式模板方法实例化
implicit template method instantion
我有一个类,它包含一个带有非类型模板参数的模板方法。代码大小变得非常大,所以我试图通过将其放入.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习惯用法来减少依赖关系。
相关文章:
- 如何使用非默认构造函数实例化模板化类
- 无法使用迭代器标记调度实例化模板
- OSX clang++:用于 cpp 文件中显式实例化模板的体系结构x86_64的未定义符号
- 实例化模板时,我是否必须显式显示参数包中的类型?
- 以下代码如何工作以每次为唯一调用堆栈唯一实例化模板函数?
- 如何同时别名和实例化模板函数?
- 无法显式实例化模板化类
- 您能否实例化模板的非专用版本并在专用化中继承它?
- 初始值设定项列表是否足够静态以允许实例化模板?
- 尝试实例化模板类的对象时出现"No Matching Constructor"错误
- 从模板基类派生是否在派生类声明的点实例化模板
- 实例化模板参数的参数包
- 使用 SFINAE 有选择地实例化模板的成员函数
- 在预编译标头中实例化模板会缩短编译时间吗?
- 找不到使用 bitset 实例化模板函数的有效方法
- 使用动态布尔变量实例化模板
- 在C 中,当我对其进行专业化时会实例化模板
- 如何在尝试为某些非类型值实例化模板子类方法时产生编译器错误
- 如何使用swig实例化模板类的模板方法
- 如何用具有特定方法的类实例化C++模板