函数模板:部分特化与重载
在 C 中,语言标准不允许函数模板部分特化。但是,某些编译器可能提供允许它的扩展。
定义的部分专业化
部分专业化涉及使用比原始模板更专业的模板参数集来定义模板。对于类模板,这意味着为部分或全部模板参数指定特定值。
示例:部分专业化和重载
提供的代码演示了重载,而不是部分重载专业化。定义了以下函数:
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; }
虽然第二个函数的模板参数类型相同,但它不是部分特化。它是一个重载第一个函数的单独函数。
函数模板特化
另一方面,允许函数模板完全特化。它涉及定义一个模板,并显式指定所有模板参数。但是,它并不直接受 C 标准支持,仅作为扩展在某些编译器中实现。
部分专业化编译器扩展
在 Microsoft Visual Studio 2010 Express 中,编译器扩展允许类和函数模板的部分特化。这不是标准行为,可能会导致可移植性问题。
以上是C 函数模板:重载与(非标准)部分专业化?的详细内容。更多信息请关注PHP中文网其他相关文章!