是否可以内联返回函数的函数的返回签名?
工作版
typedef返回函数签名
CourseId1
在结构中定义的函数
typedef void (*ptrFunc)(int);
尝试内联:
struct Observer {
ptrFunc (*getMethod)(struct Test *test);
};
答案 0 :(得分:3)
函数无法返回函数。但是,是的,您可以使用函数指针返回函数指针,而不使用typedef
以下是导航这些类型的技巧:
您会注意到ptrFunc (*getMethod)(struct Test *test);
看起来像变量声明ptrFunc someVar;
。除了代替someVar
我们的“变量”具有有趣的名称(*getMethod)(struct Test *test)
。
如果您想在不使用typedef的情况下声明someVar
类型的变量ptrFunc
,则可以编写void (*someVar)(int);
因此,如果您要声明类型为(*getMethod)(struct Test *test)
的变量ptrFunc
,则需要编写void (*(*getMethod)(struct Test *test))(int);
。
看看它是如何工作的?我刚刚将someVar
更改为(*getMethod)(struct Test *test)
。
我们可以使用像cdecl.org这样的工具仔细检查一下(注意 - cdecl不喜欢具有名称的test
参数)。
顺便说一下,这个技巧也适用于其他类型 - 例如,指向函数的指针,这些函数返回指向函数指针数组的指针。
但严重的是,只需使用typedef来保持自己的理智。
附录:
如果您想将void (*(*getMethod)(struct Test *test))(int);
放入结构中,请将其写为:
struct Observer {
void (*(*getMethod)(struct Test *test))(int);
};
...但我确信你足够聪明,可以解决这个问题。
答案 1 :(得分:1)
使用cdecl
程序将英语翻译成C. Available online too:
cdecl> declare getMethod as pointer to function (pointer to struct test) returning pointer
to function (int) returning void;
void (*(*getMethod)(struct test *))(int )