나는 내 문제를 합성 힘든 시간을 보내고있어에서 파생 나는 제목이 매우 잘 요약 모르겠어요 제공 구조체에 다형성 컨테이너의 맵을 유지하여 객체의 평면 배열을 제공합니다.는, 그들이 기본 유형
내 문제는 포함 된 개체에 함수를 적용하려고하지만 특정 기본 형식에서 파생 된 개체에만 적용하는 것입니다. 아래에는 내가 성취하려고하는 것의 버려진 버전이 있습니다. 액세스 void*
을 반환하여 BaseStock
의 요소를 포함에
struct BaseStock {};
template <typename ContainedType>
struct Stock : BaseStock {
std::vector<ContainedType> container;
};
struct Store {
std::unordered_map<std::type_index, std::unique_ptr<BaseStock>> stocks;
template <typename Base>
void something() {
for (auto& pair: stocks) {
// Here, do somehting only if pair.second's
// contained type derives from Base
}
}
};
나는 시도했지만 따라서 유형 검사를 허용하지, 그것에서 dynamic_cast
으로 불가능하다. stocks
지도는 주식의 포함 된 유형의 type_index
을 유지하지만 그 중 하나에서 계층 구조 정보를 검색하는 것은 불가능합니다.
BaseStock
이 확인 가능한 항목을 반환하는 것이 가장 가까운 해결책 인 것처럼 보이지만 ContainedType
이 항상 무언가에서 파생되도록하는 것을 의미합니다 (전혀 나쁘지는 않지만 사용중인 유형에 제한을 두지 않는 컨테이너)
도움을 주셔서 감사합니다.
구현시 여전히 type_index 당 하나의 BaseStock 만있을 수 있습니다! BaseStock의 벡터를 푸는 것은 그것을 해결합니다. 하지만 대답은 정확하고 흥미 롭습니다. 어쨌든 – brainsandwich
당신은 당신의 질문에서 벗어나지 못한'unordered_multimap'을 원합니다. 게시 한 질문에 적절하게 답변 한 경우 제 답변을 수락하십시오. – druckermanly
네, 저는 다른면을 다루는 다른 답변을 기다리고 있었지만, 실제로 당신의 질문에 "적절하게 대답했습니다"라고 게시했습니다. – brainsandwich