【问题标题】:explicit instantiation of a function [duplicate]函数的显式实例化
【发布时间】:2013-03-01 13:41:28
【问题描述】:

为什么我要使用函数的显式实例化模板,作为一个类型?如果我不使用函数的显式实例化,模板用于创建必要的函数,那么显式实例化有什么用?

template <class Any>
void Swap (Any &, Any &);
// template prototype

template <> void Swap<job>(job &, job &);
// explicit specialization for job

int main(void)
{

template void Swap<char>(char &, char &); 
// explicit instantiation for char

short a, b;
Swap(a,b);
// implicit template instantiation for short

job n, m;
Swap(n, m);
// use explicit specialization for job

char g, h;
Swap(g, h);
// use explicit template instantiation for char

}

在上面例如。对 char 类型进行显式实例化。这个有什么用??如果编译器可以利用模板为char类型制作fn。

如果有任何参考可以帮助我理清概念,请务必包含这些参考。

【问题讨论】:

  • Mr.Downvoter,请努力为您的投票留下理由。万一这是因为你发现它是一个骗子,据我记得当我进行搜索时这个问题没有出现(或者可能是因为在我发布我的问题后标题已经明确)

标签: c++ explicit-instantiation


【解决方案1】:

模板的定义必须在实例化它的每个翻译单元中可用。通常,这是通过在标题中定义模板来实现的;但在某些情况下,您可能不想这样做 - 也许您不希望您的客户看到实现的源代码。

相反,您可以在标题中声明模板;然后定义它,并在源文件中显式实例化您需要的所有特化。

【讨论】:

    猜你喜欢
    • 2019-04-15
    • 1970-01-01
    • 2011-06-23
    • 2014-02-26
    • 1970-01-01
    • 2014-10-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多