如果C或C++中有可能,有人可以告诉我吗?
void fun_a();
//int fun_b();
...
main(){
...
fun_a();
...
int fun_b(){
...
}
...
}
Run Code Online (Sandbox Code Playgroud)
或类似的东西,例如函数内的类?
谢谢你的回复,
Pot*_*ter 30
哇,我很惊讶没有人说是的!自由函数不能嵌套,但函数和类通常可以.
void fun_a();
//int fun_b();
...
main(){
...
fun_a();
...
struct { int operator()() {
...
} } fun_b;
int q = fun_b();
...
}
Run Code Online (Sandbox Code Playgroud)
您可以为仿函数提供构造函数并将对本地变量的引用传递给本地变量.否则,它可以访问其他本地类型和静态变量.但是,本地类不能是模板的参数.
小智 5
不,但在C++ 0x中,您可以http://en.wikipedia.org/wiki/C%2B%2B0x#Lambda_functions_and_expressions,可能需要几年才能完全支持.在撰写本文时,该标准尚未完成.
-编辑-
如果您可以使用MSVC 2010.我成功运行了下面的代码
void test()
{
[]() { cout << "Hello function\n"; }();
auto fn = [](int x) -> int { cout << "Hello function (" << x << " :))\n"; return x+1; };
auto v = fn(2);
fn(v);
}
Run Code Online (Sandbox Code Playgroud)
产量
Hello function
Hello function (2 :))
Hello function (3 :))
Run Code Online (Sandbox Code Playgroud)
(我>> c:\dev\loc\uniqueName.txt
在项目工作参数部分写了并复制粘贴了这个结果)
你不能在C++中的另一个函数内创建一个函数.
但是,您可以创建一个本地类functor:
int foo()
{
class bar
{
public:
int operator()()
{
return 42;
}
};
bar b;
return b();
}
Run Code Online (Sandbox Code Playgroud)
在C++ 0x中,您可以创建一个lambda表达式:
int foo()
{
auto bar = []()->int{return 42;};
return bar();
}
Run Code Online (Sandbox Code Playgroud)