bool isEven(int val) {
return val % 2 == 0;
}
bool isOdd(int val) {
return val % 2 != 0;
}
template<class Iterator>
int count_function(Iterator start, Iterator end, auto criteria) {
int count = 0;
for (; start != end; ++start) {
if (criteria(*start)) {
count++;
}
}
return count;
}
以上是我的代码,在条件给出错误“现在允许此处自动”之前为auto。我想为此功能提供isEven / isOdd条件。
那是为什么?
我尝试过int,布尔-会返回更多问题。
答案 0 :(得分:5)
函数参数中不允许关键字auto
。如果要使用其他数据类型,则需要使用模板。
template<class Iterator, class T>
int count_function(Iterator start, Iterator end, T criteria) {
int count = 0;
for (; start != end; ++start) {
if (criteria(*start)) {
count++;
}
}
return count;
}
答案 1 :(得分:3)
普通函数参数中不允许使用Auto。仅在lambda参数中允许使用。 C ++ 20将添加此功能:)
也请在此处查看“缩写功能模板”:
https://en.cppreference.com/w/cpp/language/function_template#Abbreviated_function_template
就目前而言,您可能不愿意使用lambda声明函数:
auto count_function = [](auto start, auto end, auto criteria)
{
int count = 0;
for (; start != end; ++start) {
if (criteria(*start)) {
count++;
}
}
return count;
};