K 및 V를 특수 개체로 만들어야합니다.
개체는 개체 유형을 포함해야합니다.
위의 개체는 무엇이든 가리킬 수 있습니다. 그러나, 그것은 또한 그것이 어떤 유형인지, 따라서 유형 문자열을 말할 무언가를 필요로합니다.
그런 다음 입력 내용을 읽음으로써 필요한 유형으로 포인터를 다시 캐스팅 할 수 있어야합니다.
예 : 당신이 뭔가를 할 경우
if (type == "int") cout << (int*)(myobject.pointer) << endl;
어쨌든, 당신은 거의 당신이 개체에 대해 수행 할 모든 작업을 위해, 당신은 그것의 유형을 확인해야하므로, 느슨하게 입력 인터프리터를 구축하기 시작했다 (당신 여부 값을 stdout에 추가, 연결 또는 인쇄하고 있음).
클래스 개체를 사용하고 상속을 사용하여 필요한 모든 데이터를 저장하는 것이 좋습니다.
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;
}
};
이 방법을. 기본 개체 클래스를 만드는 것은 가상 기능을 가지고
주 즉, 당신이 말한다면 :
Integer a;
a=5;
Object object = (Object)a;
cout << object.to_string << endl; // prints "5"
소위 함수가 객체의 실제 (true)가 타입에 의해 정의한다는 것을.
한편, 좋은 해결책은'std :: unordered_map'입니다. 나의 이전 +1에 대한 더 많은 이유! – Linuxios
좋은 점 @DeadMG. 이것은 제한된 기능 (많은 파생 클래스가 아니기 때문에)에서 공통 클래스에서 파생되지만,이 클래스의 클라이언트가 보충 데이터로 첨부해야하는 것을 미리 알지 못합니다. –
@AndrewS .: 고객이 기능을 필요로하는 경우에도 데이터를 연결하는 것에 대해 걱정할 필요가 있습니다. 그들은'std :: unordered_map <파생 된 *, ThatDataWhichNeed>'할 수 있습니다. – Puppy