좋아요 ... 우선 제가 생각한 건축물에 대해 설명하겠습니다. C++ 템플릿 개체의 템플릿 컬렉션을 상속과 함께 사용하려면 어떻게해야합니까?
내 통계 개체 용 통계 관리자를 구현하려고합니다. 이 통계 관리자는 템플릿을 사용하여 설계되었습니다 (사진의 선언 참조). StatMgr는 문자열 구현을 스마트 포인터 (템플릿이기도 함), ARef에 매핑하는 맵 (STL 아님)을 보유합니다. StatMgr의 특정 하위 클래스는 건설중인 부모 StatMgr의 템플릿 클래스를 정적으로 선언하므로 (LStatMgr 및 RStatMgr 참조) 자체는 템플릿 클래스가 아닙니다. (난 아직도 테스트해야 그 아저씨 링커와 부인 컴파일러 전과 그러나
LStatMgr myLStatMgr(10);
if(myLStatMgr.remove(acKey))
cout << "Remove was good" << endl;
//No need to delete :)
또는
ARef<LStat> oLStat = NULL;
myLStatMgr.getNextStat(acKey,oLStat);
if(oLStat != NULL)
oLStat->doSomethingLStatLike();
가 힘을 합쳐 진행에 나의 시도를 저지하기로 결정
이 나를 등의 작업을 수행 할 수 있습니다 기능 및 메모리 사용!). 그것이 내가 합계 클래스에 따라 다음과 같은 오류 및 경고가 의미로
:.
을 \ StatsMgr.cpp (740) : '무효 StatsMgr :: vPrint() : C4661 경고없이 적합한 정의 명시 적 템플릿 인스턴스화 요청을 제공
\ StatsMgr.cpp (740). 경고 C4661 : '무효 StatsMgr :: vPrint()'. 명시 적 템플릿 인스턴스화 요청
제공없이 적합 정의 \ StatsMgr.cpp (104) : 오류 C2084 : 함수 'StatsMgr :: StatsMgr (CONST는 ENUM doCollect, CONST의 INT)은 "이미 본체
을 갖는다 \ StatsMgr.cpp (104). 에러 C2084 : 함수'StatsMgr :: StatsMgr (CONST ENUM doCollect, CONST의 INT) 나는이 추가template class StatsMgr<LStat>; template class StatsMgr<RStat>;
내가하지 않기 때문에 경우 '이미 은 몸 지금이 :: 라인 (740)에서 않도록 delarations가 경고에 대한
오류 : 기본 클래스 "StatsMgr"에는 하위 클래스 (LStatMgr & RStatMgr)와 마찬가지로 정의 된 COTR이 있습니다. 왜 상속은 이것을 간단하게 분류하지 않는가? 분명히 이것은 CPP의 끝 부분에있는 명시 적 템플릿 인스턴스와 관련이 있지만 정확히 무슨 일이 벌어지고 있는지 이해할 수는 없습니다.
다음은 StatsMgr.cpp에서 아래
template<class type>
StatsMgr<type>::StatsMgr(const doCollect eOption, const int nListSize) :
oMyMap(wHashString, nListSize), oMyMapIter(oStatsList)
{
m_eCollectionOption = eOption;
}
LStatMgr에서입니다.
LStatMgr::LStatMgr(const doCollect eOption, const int nListSize) :
StatsMgr<LStat> (eOption, nListSize)
{
}
CPP
나는 템플릿 선언에 대한class LStatMgr;
class RStatMgr;
대체 노력이는 컴파일 오류가 전달되는하지만 링커가 오버라이드 (override)되지 않는 기능을 찾을 수 없습니다. 예를 들어 StatMgr에 "getNextStat()"이라는 함수가 있고이를 RStatMgr에서는 무시하지만 LStatMgr에서는 재정의하지 않으면 링커에서 그에 대해 불평합니다. 상속이이 상황을 다루지 않는 이유는 무엇입니까?
나를 슬프게합니다. 나는 작곡으로 되돌아 가야 할 수도 있습니다 (이 상황에서 선호되는 것이지, 바람직하지는 않습니다).
그런데 ... MSVC++ 4.1 (!!!)로 컴파일 중이므로 복제 할 수 없지만 도움을 받으십시오.
고마워요,
데니스. (매우 긴 게시물에 대해 미안)
내가 할 필요가 있음을 다시 위에 읽는 맑은 다음 StatMgr {...} StatMgr의 Subslasses이 예 ...없는 클래스 : 클래스 LStatMgr : 공공 StatMgr { StatMgr 템플릿 클래스입니다 ...} –
Dennis
더 많은 정보를 추가하려면 질문을 편집 할 수 있어야합니다. –
@Steve - 건배도 마찬가지입니다. :) – Dennis