我正在尝试编写一个返回函数指针的函数。这是我的最小例子:
void (*myfn)(int)() // Doesn't work: supposed to be a function called myfn
{ // that returns a pointer to a function returning void
} // and taking an int argument.
当我用g++ myfn.cpp
编译它时会打印出这个错误:
myfn.cpp:1:19: error: ‘myfn’ declared as function returning a function
myfn.cpp:1:19: warning: extended initializer lists only available with -std=c++11 or -std=gnu++11 [enabled by default]
这是否意味着我不允许返回函数指针?
答案 0 :(得分:9)
您可以返回一个函数指针,正确的语法如下所示:
void (*myfn())(int)
{
}
完整示例:
#include <cstdio>
void retfn(int) {
printf( "retfn\n" );
}
void (*callfn())(int) {
printf( "callfn\n" );
return retfn;
}
int main() {
callfn()(1); // Get back retfn and call it immediately
}
编译并运行如下:
$ g++ myfn.cpp && ./a.out
callfn
retfn
如果有人对g ++的错误消息显示为什么这是不可能的有一个很好的解释,我会有兴趣听到它。