首页  >  文章  >  后端开发  >  为什么默认模板参数不能用于 C 中的成员函数模板?

为什么默认模板参数不能用于 C 中的成员函数模板?

Patricia Arquette
Patricia Arquette原创
2024-10-27 12:38:01895浏览

Why Can't Default Template Arguments Be Used for Member Function Templates in C  ?

默认模板参数:为什么仅限于类模板?

在 C 中,默认模板参数仅允许用于类模板。此限制提出了为什么不能为成员函数模板定义此类参数的问题。

考虑以下示例:

<code class="cpp">struct my_class {
  template<class T = int>
  void mymember(T* vec) {
    // ...
  }
};</code>

在此示例中,尝试定义默认类型用于成员函数模板内的模板参数 T,但 C 不允许此语法。相反,默认模板参数严格限于类模板。

限制背后的原因

禁止函数模板使用默认模板参数源于历史原因。在 C 的早期版本中,独立函数并未完全集成到该语言的模板系统中。为了鼓励使用被认为更惯用的成员函数模板,默认模板参数被限制为类模板。

但是,此限制后来被认为是一种限制,因为它不必要地区分成员函数模板和独立的功能模板。正如 Bjarne Stroustrup 在缺陷报告中指出的那样:

“禁止函数模板使用默认模板参数是一个错误的残余......[它]不必要地使独立函数与成员函数不同,从而严重限制了编程风格."

C 0x 更新

为了回应这些问题,C 0x 为独立函数模板引入了默认模板参数。此更改允许模板编程更加灵活和一致。

示例

考虑以下 C 0x 代码:

<code class="cpp">template<typename Iterator, 
         typename Comp = std::less<
            typename std::iterator_traits<Iterator>::value_type>>
void sort(Iterator beg, Iterator end, Comp c = Comp()) {
  ...
}</code>

在此示例中,为 Comp 模板参数指定了一个默认模板实参,允许排序算法默认使用标准的 less 比较函数。

以上是为什么默认模板参数不能用于 C 中的成员函数模板?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn