C++局部类作为函子

C++ local class as functor

本文关键字:局部 C++      更新时间:2023-10-16

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

将下面的类(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);
}

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

C++11更改了这一点,因此您可以通过将编译器设置为使用C++11来解决此问题。

您不能在C++03中用本地类实例化模板。

此外,本标准已经为std::for_each提供了一个功能。

C++03不允许本地定义的类作为模板参数,正如您在这里发现的那样。C++11允许这样做。使用gcc,您可以尝试使用--std=c++0x 编译

正如前面所说,在C++11之前,使用本地类是不可能的,在C++11中几乎没有用,因为lambda不太冗长。

您应该简单地在函数之外声明您的类。