在C ++ VS2017中不允许自动

时间:2019-07-07 06:06:09

标签: c++

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,布尔-会返回更多问题。

2 个答案:

答案 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;
};