在C ++ VS2017中不允许自动

k.b*_*k.b 1 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;
}
Run Code Online (Sandbox Code Playgroud)

上面是我的代码,自动在条件给出错误之前“现在允许此处自动”。我想为此功能提供isEven / isOdd标准。

这是为什么?

我已经尝试过int,bool-这会返回更多问题。

Dav*_*ger 7

普通函数参数中不允许使用 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;
};
Run Code Online (Sandbox Code Playgroud)


Sol*_*ury 6

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;
}
Run Code Online (Sandbox Code Playgroud)