2011-12-01 2 views
0

템플릿이 여기에 대한 대답이 아니지만 일부 상속을 시도했는데 작동하지 않아 여기에 있습니다.C++ 템플릿 : 인스턴스가 아닌 패스 유형?

문제점 :

내 모든 "작업"기능을 수용 추상 기본 클래스가 있습니다. 그런 다음 기본 클래스를 확장하고 기본적으로 "work"함수로 전달할 데이터의 세부 정보를 채우고 몇 가지 기본 클래스 함수를 재정의하는 다른 클래스를 사용할 것입니다.

각 파생 클래스에서 변경되는 주요 데이터 중 하나는 구조체입니다.

초기 공격 계획은 BaseStruct를 정의하고 추상 기본 클래스는 그 기본 구조체에 대한 모든 작업을 수행했습니다. 파생 클래스가 기본 구조체를 확장 한 다른 구조체를 사용했다면 괜찮습니다.

이 문제는 내가 작업 한 구조체의 형식이 파생 된 형식이 아닌 BaseStruct이기 때문에 구조체의 크기를 얻을 수 없다는 문제가있었습니다.

이제 템플릿을 살펴 보겠습니다.

은 기본적으로 내가이 작업을 수행하는 기본 기능을 갖고 싶어 : 물론

template<typename StructType> 
void AbstractMaterial::CreateVertexBuffer() { 

    StructType* array = new StructType[numVertices]; 

    size_t si = sizeof(StructType) * numVertices; 

    ... 
} 

실제로이 기능에 아무것도 거치지 않고를, 정말 작동하지 않습니다. 차라리 형식 정보를 얻기 위해 전달할 StructType 인스턴스를 만들지는 않겠지 만 다른 방법이없는 것 같습니까?

본질적으로이 함수가 호출 될 때 사용할 StructType을 다른 누군가에게 파생 클래스로 지정해야합니다.

감사합니다.

답변

3

이 호출 작업을해야합니다 : 클래스

(정적) 기능 :

AbstractMaterial::CreateVertexBuffer<MySpecificStruct>(); 

을 멤버 함수의 경우 :

instance.CreateVertexBuffer<MySpecificStruct>(); 
+0

응답 해 주셔서 감사합니다. – Jon

3

당신은 유형을 지정하기 전에 <> 사이를에서 작성하여 괄호 예 :

// supposing asm is an AbstractMaterial* 
asm->CreateVertexBuffer<SomeType>(); 
+0

응답 해 주셔서 감사합니다! – Jon