현재 열거 형을 사용하여 Base * 배열에 매핑하고 있습니다. 각 Derived 유형에는 enum에 의해 인덱스가 제공됩니다. > TYPENAME지도 - 각 파생 된 유형의 인덱스가 컴파일 타임에 알려져 있기 때문에이기종 포인터 컨테이너
enum DerivedType {
DERIVED_TYPE_1 = 0,
DERIVED_TYPE_2,
...
NUM_DERIVED_TYPES
};
class Base {
};
class Derived1 : public Base {
static const DerivedType type;
};
const DerivedType Derived1::type = DERIVED_TYPE_1;
class Derived2 : public Base {
static const DerivedType type;
};
const DerivedType Derived2::type = DERIVED_TYPE_2;
class Container {
Base* obs[NUM_DERIVED_TYPES];
template<class T>
void addOb(T* ob) {
obs[T::type] = ob;
}
template<class T>
T* getOb() {
return (T*) obs[T::type];
}
Base* getOb(DerivedType type) {
return obs[type];
}
};
, 어쩌면 INT의 유형 이름을보고, 올바른 DerivedN 포인터를 반환 getOb(DerivedType type)
비 템플릿을하는 방법은 무엇입니까 ? 아니면 이런 유형의 패턴을 구현하는 더 좋은 방법이 있습니까? 또한 각 Derived 유형을 색인 구조 값에 할당하는 데이터 구조에 추가하는 것이 좋습니다.
기본적으로 올바른 형식의 Derived *를 반환하면서 형식 또는 인덱스별로 액세스 할 수있는 정적 이질 포인터 컨테이너가 필요합니다. 나는 Boost가 작동 할 것이라고 생각하지만 아직 발견하지 못했습니다.
도움 주셔서 감사합니다.
우수한.내가 한 가지 개선 한 점은 벡터에서 맵을 자동으로 채우는 것입니다 :'typedef bm :: fold, bm :: push_back >> :: 컨테이너 유형 : ' –
Ryan
고마워, 다행스럽게도 :-) –