K と V を特別なオブジェクトにする必要があります。
オブジェクトには、そのオブジェクト タイプを含める必要があります。
struct {
void *pointer;
string type;
// int type; // this is also possible
} Object;
上記のオブジェクトは、任意のものを指すことができます。ただし、それがどのタイプであるかを示す何かも必要であるため、文字列タイプです。
次に、型の内容を読み取って、ポインターを必要な型にキャストできるようにする必要があります。
例えば。
if (type == "int") cout << (int*)(myobject.pointer) << endl;
とにかく、このようなことをすると、オブジェクトに対して実行したい操作については、その型を確認する必要があるため、緩やかに型付けされたインタープリターを構築し始めています (オブジェクトを追加、連結、または出力するかどうか)。値を標準出力に)。
クラス オブジェクトを使用し、継承を使用して必要なデータを格納する方がよいでしょう。
class Object {
public virtual string to_string() {
return "";
}
};
次に、整数を格納する場合:
class Integer : public Object {
int i;
public string to_string() {
char str[50];
sprintf(str,"%d",i);
return string(str);
}
public Integer operator=(int a) {
i=a;
return this;
}
};
このようにして、すべてのオブジェクトがサポートするすべての関数のインターフェイスを定義できます。
基本 Object クラスに仮想関数を持たせると、次のようになることに注意してください。
Integer a;
a=5;
Object object = (Object)a;
cout << object.to_string << endl; // prints "5"
そのため、呼び出される関数は、オブジェクトの実際の (真の) タイプによって定義されたものになります。