Pau*_*eon 27 c c++ nested-function
在C中,以下代码可以考虑我总是使用gcc.
int foo( int foo_var )
{
/*code*/
int bar( int bar_var )
{
/*code*/
return bar_var;
}
return bar(foo_var);
}
Run Code Online (Sandbox Code Playgroud)
如何在gcc编译器上实现C++中嵌套函数的相同功能?不介意这看起来像是一个初学者的问题.我是这个网站的新手.
Ben*_*igt 36
C++中不允许使用本地函数,但本地类和本地类中允许使用函数.所以:
int foo( int foo_var )
{
/*code*/
struct local
{
static int bar( int bar_var )
{
/*code*/
return bar_var;
}
};
return local::bar(foo_var);
}
Run Code Online (Sandbox Code Playgroud)
在C++ 0x中,您还可以选择使用lambda语法创建仿函数.这在C++ 03中有点复杂,但如果你不需要捕获变量,那还是不错的:
int foo( int foo_var )
{
/*code*/
struct bar_functor
{
int operator()( int bar_var )
{
/*code*/
return bar_var;
}
} bar;
return bar(foo_var);
}
Run Code Online (Sandbox Code Playgroud)
Pra*_*rav 12
正如Herb Sutter在本文中所建议的那样,将您的功能转变为仿函数
Ale*_*hel 10
使用本地仿函数
#define lambda(return_type, function_body) \
struct { return_type operator () function_body }
int main ()
{
lambda(int, (int x, int y) { return x > y ? x : y; } ) maxFunc;
int m = maxFunc(1,2); //=> 2
...
}
Run Code Online (Sandbox Code Playgroud)
最接近嵌套函数的构造是C++ 11 lambda.
void SomeFunction(int x)
{
int var = 2;
auto lambda = [&] (int param) -> int { return var + param; };
printf("var + x = %d\n", lambda(x));
}
Run Code Online (Sandbox Code Playgroud)
Lamdas允许使用外部作用域中的变量([&]指定通过引用自动捕获外部作用域中的所有变量).不使用外部作用域中的任何变量(使用[])的lambda可以转换为相同类型的函数指针,因此可以传递给接受函数指针的函数.
| 归档时间: |
|
| 查看次数: |
16388 次 |
| 最近记录: |