当前位置: 首页 > 知识库问答 >
问题:

模板的显式实例化

郁承运
2023-03-14

根据我的尝试和错误,答案似乎是否定的,这是一个简单的

template class Class<type>;

将为班上的所有成员工作。然而,我读过的代码建议不是这样,如果能给出具体的答案,我将不胜感激。

共有1个答案

曾云
2023-03-14

通常,您不需要显式地实例化模板,而只需在头文件中定义它并包含该头文件即可。但是,显式模板实例化的一个常见应用是当您希望“隐藏”模板的定义时。想象一下下面的情况,为了简单起见,我们隐藏了模板函数的实现:

Header.H

template<class X> void f(); // declaration

header.cpp

#include "header.h"

template<class X> void f(){ /* definition */ }
template void f<int>();    // explicit instantiation for int, force the compiler to generate code
template void f<double>(); // explicit instantiation for double, same
#include "header.h"

int main()
{
    f<int>(); // OK
    f<double>(); // also OK
    f<char>(); // linker error
}
 类似资料:
  • 例1 如前所述,上面的编译和链接没有问题。然而,在实际应用程序中,我有许多函数模板和许多枚举成员。因此,我试图通过将成员分组到一个新类中来使我的生活变得更轻松,这个类本身依赖于模板参数,并为每个枚举值显式地实例化该类。 例2 编辑:用户2B-T通过https://www.onlinegdb.com/hygr7w0fv_提供了这些示例,供人们进行实验。

  • 摘要 这个问题是关于在几个不同的翻译单元中实现单个模板类实例化的单独编译。 文件A2.cpp: 现在我尝试用模板类做类似的事情。因为我确切地知道我将需要哪些实例,所以我显式地实例化模板。我单独编译每个实例化,因为成员函数包含相当大的数学表达式,这可能会在高优化级别上大大降低编译器的速度。所以我尝试了以下方法: 文件ta.h: 这是否意味着即使使用显式实例化也不可能(不允许)单独编译模板类(隐式实例

  • 我有一个成员功能模板如下: 当我编译它时,我得到了一个链接错误,所以我添加了一些它们的显式实例化。 编译器错误消息: /usr/include/c /9/variant:在“constexpr const _Tp”的实例化中 断言失败:T应该在替代项中只出现一次 我为什么得到这个?如何解决?

  • [dcl.spec.auto]/14国[强调我的]: 显式实例化声明不会导致使用占位符类型声明的实体的实例化,但也不会阻止根据需要对该实体进行实例化以确定其类型。[示例: -结束示例] 和[temp.explicat]/11声明[强调我的]: 现在,考虑我们是否在类模板中的friend声明中定义了friend函数: 如果在同一翻译单元中实例化了的多个专门化,则将违反[basic.def.odr]/

  • 我正在从事一个C语言的项目,当我显式实例化模板类时,很难理解模板类的哪些成员被显式实例化。我编写了以下文件,然后使用Visual C 2008 Express Edition的发布配置编译该文件,然后将其放入反汇编程序。 忽略这个文件目前并不真正需要模板,这可以很好地编译。我将exe放入反汇编程序,它告诉我该测试 这导致测试

  • 是否有人知道此显式特化是否有效: clang 主干 (12/3/2013) 给出以下错误: f:...\test.cpp:36:20: 错误: 从类 'O' 中出线定义 “Fun” 没有定义 1生成错误。 任何来自标准的支持参考来证明你的答案将不胜感激! 注意:我有点惊讶这是一个错误——我认为应该为任何以< code >开始实例化“Fun”的模板参数族选择专门化 这是一个叮当的错误还是我期望中的错