你能用一个函数局部类作为谓词来查找if吗

Can you use a function local class as predicate to find_if?

本文关键字:谓词 if 查找 函数局 一个      更新时间:2023-10-16

是否可以使用本地类作为std::find_if的谓词?

#include <algorithm>
struct Cont
{
    char* foo()
    {
        struct Query
        {
            Query(unsigned column)
                : m_column(column) {}
            bool operator()(char c)
            {
                return ...;
            }
            unsigned m_column;
        };
        char str[] = "MY LONG LONG LONG LONG LONG SEARCH STRING";
        return std::find_if(str, str+45, Query(1));
    }
};
int main()
{
    Cont c;
    c.foo();
    return 0;
}

我在gcc上得到以下编译器错误:

error: no matching function for call to 'find_if(char [52], char*, Cont::foo()::Query)'

在C++03中,这是不允许的Local(非嵌套)类不能是模板参数在C++11中,这是允许的

一些术语提示:

嵌套类是在另一个类的范围内定义的类,例如

class A {class B{};};

本地类是在函数范围中定义的类(如您的示例)

Query是一个局部类,而不是嵌套类。这个问题已经讨论过了。