首页 > 后端开发 > C++ > 正文

为什么 C 中的类模板只允许使用默认模板参数?

Linda Hamilton
发布: 2024-10-31 02:14:01
原创
805 人浏览过

Why are Default Template Arguments Only Allowed for Class Templates in C  ?

默认模板参数:类模板与成员函数模板

问:为什么默认模板参数仅允许用于类模板?为什么不也适用于成员函数模板呢?

示例:

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

根据 C ,默认模板参数仅对类模板有效。

A: 默认模板参数确实很有用。考虑一个排序函数:

<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>
登录后复制

但是,C 中当前限制的基本原理植根于该语言的早期,当时独立函数被认为不太重要。因此,他们需要从函数参数中推导所有模板参数,从而排除使用默认值。

此限制妨碍了代码灵活性以及与成员函数模板的兼容性。为了纠正这个问题,C 0x 为函数模板引入了默认模板参数。

正如 C 的创建者 Bjarne Stroustrup 在缺陷报告中所述:

“默认模板的禁止函数模板的参数是那个时代的错误残余,独立函数被视为二等公民,并要求所有模板参数从函数参数推导而不是指定。“

”该限制严重限制了编程风格不必要地使独立函数与成员函数不同,从而使编写 STL 风格的代码变得更加困难。”

以上是为什么 C 中的类模板只允许使用默认模板参数?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板