C++本地类作为仿函数

Sha*_*nky 7 c++

我试图使用本地类作为函子并使用g ++(3.4.6)获得编译器错误.

将下面的class(Processor)放在全局范围内可以解决错误,所以我猜错误是因为函数本地结构/类.我更喜欢在函数内部使用类,以实现代码清晰度和易用性.想知道是否有解决方法使下面的代码有效.

test.cpp:24:错误:没有匹配函数来调用\ u2018foreachArg(int&,char*&,processSubs(int,char*):: Processor&)\ u2019

template <class Functor>
void foreachArg(int n, char *args[], Functor& f)
{
    for(int i=0; i<n; ++i)
        f(args[i]);
}

int processSubs(int argc, char *args[])
{
    class Processor
    {
        public:
            void operator()(const char *arg)
            {
            }
    };

    Processor p;
    foreachArg(argc, args, p);
}

int main(int argc, char *argv[])
{
    processSubs(argc, argv);
}
Run Code Online (Sandbox Code Playgroud)

bam*_*s53 9

在C++中,在C++ 11之前,用作模板函数参数的类必须具有外部链接.本地类没有外部链接,因此您不能以这种方式使用它们.

C++ 11对此进行了更改,因此您可以通过将编译器设置为使用C++ 11来解决此问题.