您需要将 K 和 V 设为特殊对象。
对象需要包括它是什么对象类型。
struct {
void *pointer;
string type;
// int type; // this is also possible
} Object;
上面的 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"
因此调用的函数是由对象的实际(真实)类型定义的。