作为“加速 C++”的练习,我正在重新实现算法头文件中的一些基本 STL 算法。我想知道为什么在某些情况下,我们需要包含我们传递给另一个函数的函数的参数列表,而在其他时候,我们只需要包含函数名称。我看不出这背后的逻辑。
例子:
// In this case, I just need to include the 'function' name in the parameter list.
template <class In, class Out, class T>
Out transform(In begin, In end, Out dest, T function) {
while (begin != end) {
*dest++ = function(*begin++);
}
return dest;
}
// In this case, 'predicate' requires a parameter list.
template <class In, class Out>
Out remove_copy_if(In begin, In end, Out dest, bool predicate(double x)) {
while (begin != end) {
if (!predicate(*begin)) {
*dest++ = *begin;
}
++begin;
}
return dest;
}
它与函数的返回类型是模板有关吗?任何澄清将不胜感激!