我如何理解"Point of Instantiation"的含义

How can I understand the meaning of "Point of Instantiation"

本文关键字:Instantiation Point 何理解 of      更新时间:2023-10-16

我现在正在从非常量常量表达式中学习一些元编程技能,我对"实例化点"感到困惑。作者说

每当在需要实例化的上下文中引用模板专用化

时,该上下文都会产生一个"实例化点"(它有效地表示允许编译器为引用的模板专用化生成代码的位置)。

如果在依赖于周围模板 Y 的模板参数的上下文中引用模板专用化 X,则给定的瞬时点取决于 Y 的瞬时点。

  • 如果 X 是函数模板专用化,则实例化点是 Y 的点。
  • 如果 X 是类模板专用化,则实例化点紧邻 Y 的实例化点。

否则,给定的实例化点与命名空间范围声明/定义 (D) 的位置相关联,该声明/定义包含引用 X 的语句。

  • 如果 X 是函数模板专用化,则实例化点紧跟在 D 之后。
  • 如果 X 是类模板专用化,则实例化点紧接在 D 之前。

我不知道什么是"模板专用化 X 在依赖于周围模板 Y 的模板参数的上下文中引用",他的意思是

template<typename T>
class Y{
template<typename U1> void X1(){...};
template<typename U2> class X2{...};
}

考虑同时实例化Y<int>::X1<int>(...)X1Y

考虑Y<int>::X2<int>{...}X2第一个Y第二个。

它只是意味着,给定

template<class> class A {};
template<class T> void f(T) {}
template<class T> void g() {f(A<T>{});}

(比如)A<int>的实例化点紧接在f<int>g<int>共享的点之前。 (请记住,函数(但不是类)模板可以在翻译单元中具有多个实例化点。