你可以使用函数本地类作为find_if的谓词吗?

时间:2011-06-15 13:02:54

标签: c++

是否可以使用本地类作为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)'

2 个答案:

答案 0 :(得分:10)

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

一些术语提示:

嵌套类是使用另一个类的范围定义的类,例如

class A {class B{};};

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

答案 1 :(得分:1)

Query是本地类,而不是嵌套类。已经讨论过这个问题in this question