리소스 로더를 만들려고하고 클래스 리소스와 템플릿 클래스 리소스 관리자를 갖고 싶습니다. 다른 유형의 리소스는 기본 리소스 클래스 (예 : 이미지, 3D 메시 등)에서 상속받습니다.기본 클래스와 그 파생 클래스로 제한된 C++ 템플릿
모든 유형의 리소스에 대한 맵을 가질 수는 있지만 파생 클래스 고유의 함수를 호출 할 수 없습니다. 3dMesh에는 이미지로 getWidth() 등이있을 수있는 getVertecies()가있을 수 있습니다.
그래서 템플릿이있는 resourceManager 클래스를 사용할 것입니다. 자원 관리자는 자원 유형이 아닌 기본 리소스 클래스의 포인터를 반환
resourceManager<3dMesh> resMan3DMeshes();
resourceManager<picture> resManPictures();
:
그럼 당신은 같은 자원 관리자를 만들 수 있습니다. 그렇게하면 각 리소스 유형에 맞는 함수를 호출 할 수 있습니다.
pointerToMesh->getVerticies();
pointerToPicture->getWidth();
그러나이 방법을 사용하면 리소스 관리자를 만드는 데 아무 것도 통과 할 수 없습니다.
resourceManager<int> resManInts();
리소스 관리자가 기본 리소스 클래스의 기능을 호출 할 수 있어야한다는 점을 제외하고는 문제가 없습니다. 예를 들어 기본 리소스 클래스는 파일에서로드하기위한 가상 함수를 갖지만 리소스 관리자는 템플릿으로 아무것도 전달할 수 없으므로 이러한 함수를 호출 할 수 없으며 int 또는 string 또는 loadFromFile ().
기본 클래스를 사용하여 템플릿을 사용하여 작업을 수행하려고했으나 모든 파생 클래스를 전문으로하지 않는 한 기본 클래스의 포인터와 파생 클래스가 아닌 포인터를 반환합니다. 템플릿이없는 클래스가 아니라 각 유형에 대한 리소스 관리자 클래스 만 있으면됩니다.
템플릿을 사용하고 파생 클래스의 함수를 호출하는 장점이 있지만 기본 클래스의 함수에 여전히 익숙하지 않은 방법이 있습니까?
템플릿이 클래스 멤버를 호출하면 해당 멤버가없는 유형에 템플릿을 인스턴스화 할 수 없습니다. 컴파일되지 않습니다. – sje397
질문을 파싱하는데 문제가 있습니다. 아마도 문제가되는 도메인 언어 중 일부를 배제 할 수 있습니까? –