1

可能重复:
C++ 从函数返回数组

我正在尝试声明一个返回 void 指针数组的函数。我有以下代码:

void *[] get_functions();

但是我得到编译错误:expected unqualified-id before '[' token

我正在尝试做的事情是否有效,如果是,我的语法错误是什么?

编辑 在回复一些评论时,我试图返回一个函数数组(现在可能是一个向量),然后我可以随机选择一个并调用它。你会建议什么而不是void *

编辑 2 返回的函数类型将有一个固定的签名(尚未确定),让我们为了参数的缘故说签名将是 int f(int i, int j) 我的get_functions函数的返回是什么样的,或者vector<void*>仍然是合适的?

4

4 回答 4

7

C++ 不允许函数返回数组。您可能应该返回一个向量:

std::vector<void *> get_functions();
于 2012-10-11T11:50:05.730 回答
2

你的方法有两个问题。首先是你不能从函数返回数组。在 C 中,您将返回指向数组中元素的指针,但这意味着您需要管理内存。在 C++ 中,您可以使用容器std::vector代替数组,并且可以按值返回。

第二个问题是您正在返回函数指针,并且void*标准不保证从函数指针到的转换。这里的替代方法从返回适当类型的函数指针(即std::vector<int (*)(int,int)>)或使用更高级别的构造(如std::function(C++11,或boost::function在 C++03 中): 开始std::vector<std::function<int(int,int)>>。第一种方法更适合您提供的描述,因为函数的类型似乎是固定的,使用函数指针的开销很小。第二种方法更通用,因为它可以封装任何可以用 two 调用int并返回 an 的int东西,包括函数指针和函数对象。这反过来又允许您通过以下方式调整其他功能的签名std::bind或创建具有适当签名的 lambda:[](int x, int y){ return x*y;}

于 2012-10-11T13:17:19.410 回答
1
void **get_functions();

稍后您可以说:

void **pp = get_functions();
pp[5];     // This is the sixth pointer-to-void

如果您还不知道数组的长度,则需要以其他方式传递它——因此,Jerry Coffin 的答案可能更好。

于 2012-10-11T11:52:54.417 回答
0

您可以将 void 指针返回到数组的第一个元素。您可以将其转换为调用函数。数组本身作为指针传递/返回。

于 2012-10-11T12:08:14.877 回答