在C中,如何声明一个返回函数返回函数的函数等。 即,我想要这样的东西
typedef A (*A)();
A a = ...
a()()()()();
我想实现以下C ++行为:
struct A { A operator()() { return A(); } };
A a;
a()()()()();
答案 0 :(得分:0)
要让函数返回自己类型的函数,需要使用中间函数类型。
由于C标准允许将函数变量强制转换为任何其他函数变量,然后返回以下方法:
typedef int (*T)(void); /* The type of desire. */
typedef void (*_T)(void); /* The intermediate type. */
int g(void)
{
return 42;
}
_T h(void)
{
return (_T) g;
}
int main(void)
{
T f = (T) h;
int a = f();
int b = ((T) h())();
}
a
和b
都会被42
分配。
答案 1 :(得分:0)
你不能在C
中返回一个函数 - 你返回一个指向函数的指针。如果您要定义一个函数,该函数返回一个指向函数的指针,该函数再次返回指向函数的指针等等,那么您可以使用typedef
来实现它。
typedef int (*f)(int);
typedef f (*g)(float);
typedef g (*h)(char);
// and so on
但是,如果您要定义一个函数,该函数返回指向其自身类型的函数的指针,那么您不能这样做,因为您无法在C
中定义递归类型。有关详情,请参阅此处 - Function Returning Itself
答案 2 :(得分:0)