文字列のマップを関数ポインターに格納する必要がある 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
明らかに、ここには多くの問題がありますが、どこから始めればよいかわかりません。上記のコードの何が問題なのかを誰かに教えてもらえますか、または現在行っている方法に代わる方法を教えてもらえますか?
ノート
void**
just ではなくa を返す理由はvoid*
、異なる型の複数の値を返す必要がある場合があるためです。例としては、上記のように、結果のマップとマップ内のエントリ数の両方を返したい場合があります。ただし、その配列を構築する方法をまだ理解していません。
編集
したがって、これまでの回答に基づいて、これがこの問題を解決する間違った方法であることは明らかです。それを念頭に置いて、誰かがより良いものを提案できますか? さまざまな関数を 1 つのマップに格納できる必要があります。つまり、さまざまな型を取り、返す関数に対して 1 つのデータ型を定義できる必要があります。そして、複数の値を返すことができることが重要です。