STL과지도 반복자에서 필드를 받기 :함께 자신의 이름과 유형, 내가 특정 개체를 저장하는지도 컨테이너가
ObjContainer::iterator it = mObjContainer.find(name);
if (it != mObjContainer.end()) {
if (it->second.second) {
it->second.second->setObj2Default();
delete it->second.second;
it->second.second = 0;
}
}
분명히 많은 "it-> second.second"는 분명하지 않고 유지하기 어렵습니다. 나중에 필드가 변경되면 하나 이상의 필드를 지원하기 위해 모든 필드가 지원됩니다. 그래서 나는 다음과 같이 필드에 액세스하는 기능으로 변경할 것을 시도하고있다 :
ObjBase*& getObjPtr(ObjContainer::iterator it) {
return it->second.second;
}
은 마찬가지로, 또한 getObjName 및 getObjType을 작동합니다.
는또한 그 필드를 반환하는 반복자이 더 명확 될 것이라고 나에게 제안했다 :
it.objPtr();
it.objName();
it.objType();
을하지만 난 STL 반복자 바로 이러한 기능을 가지고 상속 될 수 없습니다해야한다고 생각? 나는지도를위한 래퍼를 만들고 그 함수들을 가지고 반복자를 만드는 것 외에는 그것을 할 수있는 다른 방법이 없다.
그래서 가장 적합한 옵션은 무엇입니까? 이 문제를 해결할 다른 방법이 있습니까?
은 왜 그냥 구조체를 사용하지 않는 다음 코드에서
second.second
더 이상 없다 한 쌍 대신에 당신이 원하는 방식으로 필드 이름을 짓습니까? – Spidey
@ Spidey : 라이브러리에 완벽하게 사용할 수있는 라이브러리가있는 경우 왜 자신의 클래스 정의를 굴릴까요? –
당신은 acessors와 wrap'em 수 있습니다.적어도 쌍을 사용하지 않으면 빠져 나갈 것입니다. 첫 번째, 두 번째 -> 두 번째 -> 두 번째 등 – Spidey