返回函数指针返回相同类型的函数

时间:2014-03-17 19:31:12

标签: c function-pointers

在C中,如何声明一个返回函数返回函数的函数等。 即,我想要这样的东西

typedef A (*A)();
A a = ...
a()()()()();

我想实现以下C ++行为:

struct A { A operator()() { return A(); } };
A a;
a()()()()();

3 个答案:

答案 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())();
}

ab都会被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)

答案是“几乎是”。

看看Drew McGowen在回答Function Returning Itself时给出的答案。

我认为该答案提供的代码最接近您要查看的行为。