我正在构建一个C++程序,需要存储一个字符串映射到函数指针。但是,每个函数可能有不同的返回类型和参数。我试图解决这个问题的方法是通过创建函数来获取void指针数组并返回一个void指针数组,然后根据需要转换参数并返回值。返回一个void数组*
为了弄清楚这将如何工作,我试图建立一个简单的虚拟,但不能让它编译。我已经尝试了很多东西,但是我不断收到不同的错误。这里有一个例子:
#include <string>
#include <iostream>
#include <map>
using namespace std;
void** string2map(void** args){
//takes a string of the form "key:value;key:value;..." and returns a map<string,string>
string st = *((string**) args)[0];
map<string, string> result = map <string, string>();
//code doesnt matter
return (void*) &((void*) &result);
}
int main(){
string test = "hello:there;how:are you?";
map<string, string> result = *(map<string, string>**)string2map((void*) &((void*) &test))[0];
return 0;
}
,当我尝试编译,我得到:
void.cpp: In function 'void** string2map(void**)':
void.cpp:12:34: error: lvalue required as unary '&' operand
void.cpp: In function 'int main()':
void.cpp:17:89: error: lvalue required as unary '&' operand
显然,有很多事情错在这里,但我真的不知道从哪里开始。任何人都可以告诉我上面的代码有什么问题,或者给我一个替代方法,我目前正在做它?
注意
的原因,我回国的void**
而不只是void*
是,有可能是一个情况,我需要返回多个不同类型的值。例如,如果我想要返回结果地图和地图中条目的数量。尽管如此,我还没有弄清楚如何构建这个数组。
编辑
因此,基于响应,到目前为止,它似乎很清楚,这是解决这个问题的错误的方式。考虑到这一点,任何人都可以提出更好的建议吗?我需要能够将各种功能存储在单个映射中,这意味着我需要能够为接受和返回不同类型的函数定义单个数据类型。能够返回多个值是非常重要的。
你写这个的方式,无论你做什么都会出错,因为你要返回一个非静态局部变量的地址。 –
此外,请考虑标记代码中与您的错误消息中指示的行相匹配的行。一目了然确定哪些线路是12和17并不容易。 –
你真的只需要一个'void *'参数。如果你需要更多的东西,你总是可以让这个参数成为一个向量或一个结构体。 –