문자열을 임의의 객체 또는 기본 유형에 매핑 할 수있는 클래스를 만들려고합니다. 내가 시도 ["speed": 3, "useNormal": false, "normal": Vec3()]
C++지도 객체 문자열
한 가지 방법은 BaseObject
구조체를 만드는 것이었다과 IntObject
같은 다른 클래스를 파생 :지도는 다음과 같이 보일 수 있도록 명확히하기 위해, 나는 종류를 하나의 제네릭 형식의 이야기,하지만 차이가 있어요 그것으로부터 FloatObject
. 이렇게하면 std::map<std::string, BaseObject*>
을 만들 수있었습니다. 그러나이 접근법은 어색해 보이고지도에 대한 게터와 세터는 모든 단일 유형에 대한 스위치 케이스가 필요합니다.
누군가가 바이트를 사용하도록 제안했습니다. 기본적으로 이것은 객체를 바이트 배열로 직렬화 및 비 직렬화하는 것을 의미하므로 맵은 std::map<std::string, byte*>
과 같습니다. 그러나이 방법을 사용하면 극복해야 할 큰 장애물은 바이트 배열에서 특정 유형의 객체를 생성하는 것입니다.이 배열은 어떻게해야할지 모릅니다.
또 다른 제안은 C++ 17 변형을 사용하는 것이 었습니다. 그러나 그것은 너무 넓게 지원 되기에는 너무 새롭다.
나는 어떤 종류의 입력을 주셔서 감사합니다!
를 호출 할 때
거대한 메모리 누수가 마음하십시오 : 나는 부스트 및 C++ (17)을 피하기 위해 노력하고 있기 때문에 그러나, 여기에 순수 C++ 구현은이 문제에 대한 객체 지향 접근 방식 지도 밖으로의 값, 사용할 유형을 어떻게 알 수 있습니까? 나는. 'your_map [ "key"]'의 타입을 아는 어떤 방법이 있을까요? –
http://www.boost.org/doc/libs/1_61_0/doc/html/any/s02.html –
unorderedmap을 사용 하시겠습니까? http://www.cplusplus.com/reference/unordered_map/unordered_map/ – Alander