C++局部类作为函子
C++ local class as functor
我正试图使用本地类作为函数,并使用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不太冗长。
您应该简单地在函数之外声明您的类。
相关文章:
- 使用的未初始化局部变量'Quick'
- 修复未初始化的局部变量错误
- 局部变量保留函数中的值
- 为什么 'main' 函数中的局部 int 变量会自动初始化?
- 如何使用 C++ 中的继承函数访问派生类中的局部变量
- 将引用分配给局部变量,如果局部变量超出范围,它会超出范围吗?
- 在 OpenGL 中将笛卡尔世界坐标转换为球面局部坐标
- Gnuplot_i.hpp C++接口绘制局部变量而不是文件
- 如何在函数外部访问函数中局部变量的值?
- 赋予全局变量而不是局部变量优先级的函数 - (异常行为)
- C++中静态方法的局部变量范围
- 未初始化的局部变量错误甚至认为我初始化了它(C++)
- 离开范围后如何保护局部变量的值?
- 局部变量名称冲突
- C++ lambda:如何'freeze'局部变量的值?
- 我应该使我的局部变量常量还是可移动的
- 获取具有静态局部变量的绑定/推断捕获 lambda 的函数指针
- 全局和局部变量初始化与 constexpr 的差异背后的基本原理
- 返回对局部变量 - C++ 的引用
- 函数局部静态变量:从性能角度来看的优点/缺点