首页 > 解决方案 > 是明确的专业模板吗?

问题描述

根据[temp.spec] p4,特化是实例化或显式特化的类/函数/[...]。[temp.expl.spec] p19指出一些显式特化是模板,这使我相信显式特化是特化(在“从模板生成的实体”意义上),而不是模板(有时)。

我的问题是,明确的专业化是实际的具体实体(类/函数/[...]),还是它们是模板。如果不是,它们到底是什么,它们不是模板或特化(遵循 [temp.spec] p4 提供的定义)

标签: c++templateslanguage-lawyertemplate-specialization

解决方案


您的问题假定不需要存在的二进制状态,即明确的专业化是模板或“具体实体”。

显式特化可能是也可能不是模板。非模板显式特化是一种特化。正如您引用的文字所述:

特化是实例化或显式特化的类、变量、函数或类成员。

因此,显式特化的行为类似于特化。模板实例化(隐式或显式)创建特化,除非参数匹配显式特化。所以相反,这就是被使用的东西。但无论是通过实例化还是通过显式特化生成,特化都被视为特化。

因此,例如,处理同一函数模板的不同显式特化,不是通过重载解析规则,而是通过模板参数推导。这与该模板的任何其他专业化情况没有什么不同。


推荐阅读