我正在尝试编写一个返回函数指针的函数。这是我的最小示例:

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]

这是否意味着不允许我返回函数指针?

最佳答案

您可以返回函数指针,并且正确的语法如下所示:

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++的错误消息表明无法实现,那么我很想听听。

关于c++ - 将 "error: ’ myfn声明为“返回函数的函数”是什么意思?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18773359/

10-10 01:06