我正在构建一个需要将字符串映射存储到函数指针的 C++ 程序。但是,每个函数可能有不同的返回类型和参数。我试图解决这个问题的方法是通过创建函数来获取一个 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
显然这里有很多问题,但我真的不知道从哪里开始。谁能告诉我上面的代码有什么问题,或者给我一个替代我目前这样做的方式?
笔记
我返回 avoid**
而不是 just的原因void*
是可能存在我需要返回多个不同类型的值的情况。一个例子是,在上面,我想返回结果映射和映射中的条目数。不过,我什至还没有弄清楚如何构建该数组。
编辑
因此,根据迄今为止的回应,很明显这是解决此问题的错误方法。考虑到这一点,有人能推荐一个更好的吗?我需要能够将各种函数存储在单个映射中,这意味着我需要能够为接受和返回不同类型的函数定义单一数据类型。能够返回多个值很重要。