部分函数模板特化还是重载?
在 C 中,函数模板可以进行部分特化是一个常见的误解。然而,C 标准只允许完全特化。
重载与部分特化
最初提供的代码:
#include <iostream> template <typename T1, typename T2> inline T1 max(T1 const& a, T2 const& b) { return a < b ? b : a; } template <typename T> inline T const& max(T const& a, T const& b) { return 10; }
不允许演示 max 函数的部分特化和重载。重载允许多个函数具有相同的名称但不同的参数类型。
部分特化的概念
部分特化是指类或函数模板专门针对特定集合模板参数。对于类,这是通过提供具有相同名称但参数较少的专用模板来实现的。对于函数模板,部分特化将涉及仅指定模板参数的子集,目前 C 标准不允许这样做。
部分类特化示例
类的部分特化如下所示:
template <typename T1, typename T2> class MyClass { // ... }; // Partial specialization: both template parameters have the same type template <typename T> class MyClass<T, T> { // ... };
编译器扩展
某些编译器(例如 Microsoft Visual Studio 2010 Express)可能会为函数模板提供部分专业化作为扩展。但是,使用此类扩展会损害代码的可移植性,因为其他编译器可能不支持它们。
以上是部分函数模板特化或重载:什么时候应该使用哪个?的详细内容。更多信息请关注PHP中文网其他相关文章!