9

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

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]

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

4

1 回答 1

17

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

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++ 的错误消息表明这是不可能的有一个很好的解释,我很想听听。

于 2013-09-12T20:03:10.410 回答