小编典典

函数模板的默认模板参数

all

为什么默认模板参数只允许在类模板上使用?为什么我们不能在成员函数模板中定义默认类型?例如:

struct mycclass {
  template<class T=int>
  void mymember(T* vec) {
    // ...
  }
};

相反,C++ 强制默认模板参数只允许在类模板上使用。


阅读 90

收藏
2022-07-12

共1个答案

小编典典

提供默认模板参数是有意义的。例如,您可以创建一个排序函数:

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

C0x 将它们引入 C。请参阅 Bjarne Stroustrup 的此缺陷报告:函数模板的默认模板参数以及他所说的

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

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

2022-07-12