我的意思是以下内容。我想要一个模板函数,它需要两个 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);
}