我如何理解"Point of Instantiation"的含义
How can I understand the meaning of "Point of Instantiation"
我现在正在从非常量常量表达式中学习一些元编程技能,我对"实例化点"感到困惑。作者说
每当在需要实例化的上下文中引用模板专用化时,该上下文都会产生一个"实例化点"(它有效地表示允许编译器为引用的模板专用化生成代码的位置)。
如果在依赖于周围模板 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>(...)
、X1
和Y
。
考虑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>
共享的点之前。 (请记住,函数(但不是类)模板可以在翻译单元中具有多个实例化点。
相关文章:
- Qt5 部署"procedure entry point could not be located"
- 我想获取点的属性,它报告错误 C3867:"point::output_x":非标准语法;使用"&"创建指向成员的指针
- 如何从内存中分配GDI+ POINT类地址?
- 如何在OpenCV中存储部分轮廓点喜欢新矢量中的左侧,该类型为<vector<vector<Point>>
- 在每个向量<向量中查找最小/最大 x,y<Point>>
- "Entry Point Not Found" Azure 中的错误 LightGBM R 包
- 如何修复'The procedure entry point SDL_RWclose could not be located in the dynamic link library'
- 如何创建geometry_msgs :: point
- 为什么我会得到"floating point exception"
- Paraview:Live Point Cloud可视化插件
- C++ 模板:'Instantiation of variable required here, but no definition is available'
- Template instantiation decltype & declval with std::tuple_cat
- Libavcodec "the procedure entry point for av_frame_alloc could not be located" Visual Studio 2017 C+
- 无法运行Qt C++发布版本。 'The procedure entry point could not be located'
- 没有用于初始化'point'的匹配构造函数
- CGAL 如何将 std::vector<Point> 点保存到 .xyz 文件中?
- 我如何理解"Point of Instantiation"的含义
- "[Error] pointer value used where a floating point value was expected" 如何解决此错误?
- BOOST ::线程内会成员功能调用返回unique_lock Instantiation错误
- CreatePolygonRgn and const POINT *