Possible Duplicate:
C++ return array from function
I am trying to declare a function that returns an array of void pointers. I have the following code:
void *[] get_functions();
However I get the compilation error: expected unqualified-id before '[' token
Is what I’m trying to do valid, and if so what is my syntax error?
EDIT
In reply to some of the comments, I am trying to return an array (which now will probably be a vector) of functions, which I can then randomly select one and call it. What would you suggest instead of void *?
EDIT 2
The type of functions returned will have a fixed signature (not decided yet), Let’s for arguments sake say the signature will be int f(int i, int j) what would the return of my get_functions function look like, or will vector<void*> still be appropriate?
There are two issues with your approach. The first of which is that you cannot return arrays from functions. In C you would return a pointer to the elements in the array, but that implies that you need to manage the memory. In C++ you can use a container, like
std::vectorinstead of the array, and that can be returned by value.The second issue is that you are returning function pointers, and the conversion from function pointer to
void*is not guaranteed by the standard. The alternatives here start with returning a function pointer of the appropriate type (i.e.std::vector<int (*)(int,int)>) or using higher level constructs likestd::function(C++11, orboost::functionin C++03):std::vector<std::function<int(int,int)>>. The first approach is better suited for the description you provided as the types of the functions seem to be fixed and there will be little overhead in using the function pointers. The second approach is more generic as it can encapsulate anything that is callable with twointand return anint, including function pointers and function objects. That in turn allows you to adapt the signatures of other functions by means ofstd::bindor create lambdas with the appropriate signature:[](int x, int y){ return x*y;}