我的意思是以下内容。我想要一个模板函数,它需要两个 vector 迭代器(或两个指向double数组的指针),并返回一个与我通过的 vector 迭代器或数组指针相关的double。但是,我希望它适用于double或int或任何算术类型。

我想我不能说:

template <class T>
T* func(T Begin, T End)

 T new_variable = Begin + 5;

 return (*new_variable);
}

因为编译器不会理解T *的含义。我想到的解决方案是接受我要返回的内容,并将其作为第三个参数:
template <class T>
void func(T Begin, T End, T* new_variable)

 new_variable = Begin + 5;

 return (*new_variable);
}

这会工作吗?即使是这样,还有另一种方法可以做我想做的事吗? (抱歉,如果我不够清楚。)

最佳答案

如果要返回 double 型(即取消引用时将得到的类型),则可以使用迭代器特征:

template<typename RandomAccessIterator>
typename std::iterator_traits<RandomAccessIterator>::value_type
func(RandomAccessIterator a, RandomAccessIterator b) {
    typedef typename std::iterator_traits<RandomAccessIterator>::value_type
      value_type;

    // use value_type now, when you want to save some temporary
    // value into a local variable, for instance
    value_type t = value_type();
    for(; a != b; ++a) t += *a;
    return t;
}

这些适用于所有迭代器,包括指针:
int main() {
  int d[3] = { 1, 2, 3 };
  assert(func(d, d + 3) == 6);
}

10-03 00:15