我正在尝试声明一个返回void指针数组的函数。我有以下代码:
void *[] get_functions();
但是我收到了编译错误:expected unqualified-id before '[' token
我正在尝试做的是有效的,如果是的话,我的语法错误是什么?
修改
在回复一些注释时,我试图返回一个函数的数组(现在可能是一个向量),然后我可以随机选择一个并调用它。你会建议什么而不是void *
?
编辑2
返回的函数类型将有一个固定的签名(尚未决定),为了论证,让我们说签名将是int f(int i,int j)我的get_functions
函数的返回值是什么样的,或者vector<void*>
仍然合适吗?
答案 0 :(得分:7)
C ++不允许函数返回数组。你可能应该返回一个向量:
std::vector<void *> get_functions();
答案 1 :(得分:2)
您的方法存在两个问题。第一个是你不能从函数返回数组。在C中,您将返回指向数组中元素的指针,但这意味着您需要管理内存。在C ++中,您可以使用容器,如std::vector
而不是数组,并且可以按值返回。
第二个问题是您正在返回函数指针,并且标准无法保证从函数指针到void*
的转换。这里的替代方法首先返回适当类型的函数指针(即std::vector<int (*)(int,int)>
)或使用更高级别的结构,如std::function
(C ++ 03中的C ++ 11或boost::function
) :std::vector<std::function<int(int,int)>>
。第一种方法更适合您提供的描述,因为函数的类型似乎是固定的,并且使用函数指针的开销很小。第二种方法更通用,因为它可以封装任何可用两个int
调用的东西并返回int
,包括函数指针和函数对象。这反过来允许您通过std::bind
调整其他函数的签名或使用适当的签名创建lambdas:[](int x, int y){ return x*y;}
答案 2 :(得分:1)
void **get_functions();
稍后您可以说:
void **pp = get_functions();
pp[5]; // This is the sixth pointer-to-void
如果您还不知道数组的长度,则需要以其他方式传递 - 因此,Jerry Coffin的答案可能更好。
答案 3 :(得分:0)
你可以只返回指向数组第一个元素的void指针。你可以把它放在调用函数中。 数组本身作为指针传递/返回。