【发布时间】:2014-01-04 04:57:30
【问题描述】:
我经常发现需要编写返回函数指针的函数。每当我这样做时,我使用的基本格式是:
typedef int (*function_type)(int,int);
function_type getFunc()
{
function_type test;
test /* = ...*/;
return test;
}
但是在处理大量函数时这会变得很麻烦,所以我不想为每个函数(或每个函数类)声明一个 typedef
我可以删除 typedef 并将函数中返回的局部变量声明为:
int (*test)(int a, int b); 让函数体看起来像这样:
{
int (*test)(int a, int b);
test /* = ...*/;
return test;
}
但是我不知道为函数的返回类型设置什么。 我试过了:
int(*)(int,int) getFunc()
{
int (*test)(int a, int b);
test /* = ...*/;
return test;
}
但是会报告语法错误。如何在不为函数指针声明 typedef 的情况下声明此类函数的返回类型。甚至可能吗?另请注意,我知道为每个函数声明 typedef 似乎会更干净,但是,我非常小心地将我的代码构造为尽可能干净和易于遵循。我想消除 typedef 的原因是它们通常只用于声明检索函数,因此在代码中看起来是多余的。
【问题讨论】:
-
+1,很有趣,我之前也在想自己,只是使用了 typedef 。
-
不应该
test_type是function_type吗? (并不是说它有那么重要,只是为了完全清楚。) -
您在问题中遗漏了一些内容(例如,
test_type的定义是什么)。当我们感到困惑时,使回答您的问题变得更加困难。大声笑 -
@SE 是的。我试图想出一个很好的例子来作为答案发布,除非你认为这不是要走的路......
-
@AndyLin 有很多。几乎任何时候您都必须编写库包装器。只是从我的脑海中挑选一个真实世界的例子,假设您正在编写一个 opengl 应用程序并希望支持动态加载用户系统上的任何版本的 opengl。然后,您围绕 open gl 编写一个包装器,并从库中动态加载您使用的每个 gl 函数。在这种情况下,在初始化时,您希望通过在该版本的 open gl 中查找其名称来返回每个 gl 函数。事实上,open gl 有一些旨在以这种方式加载的扩展
标签: c syntax types function-pointers