c++ - 是明确的特化模板吗?

标签 c++ templates language-lawyer template-specialization

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

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

最佳答案

你的问题假定了一个不需要存在的二元状态,即一个明确的特化要么是一个模板,要么是一个“具体实体”。

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

A specialization is a class, variable, function, or class member that is either instantiated or explicitly specialized.

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

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

关于c++ - 是明确的特化模板吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56352660/

相关文章:

c++ - 视觉接受来自 std::byte 迭代器的 std::string

c++ - 函数参数列表中的类声明

c++ - 已排序数组的一部分被反转

C++ 访问堆

c++ - 产生从负到正范围的随机 float ?

c++ - 在 C/C++ 程序中嵌入 IPython-shell

c++ - 哪种方式更好地定义类型特征或行为?

c++ - 为什么这有效(Templates,SFINAE)。 C++

python - django 访问模型需要花费很多时间

c++ - 程序退出期间的函数局部静态初始化