2017-05-18 1 views
-1

BlockTypeBlockInstance의 두 클래스가 있습니다. BlockInstanceBlockType &을 템플릿 매개 변수로 사용합니다. 나는 C++에 완전히 익숙하지 않고 BlockInstance 타입을 반환하는 함수를 정의 할 때 BlockType 안에 템플릿 매개 변수로 전달할 수없는 이유를 알고 싶습니다.C++ 'this'를 비 유형 템플릿 매개 변수로 사용할 수 없음

코드 :

class BlockType; 

template <BlockType & blockType> 
class BlockInstance; 

class BlockType{ 
public: 
    virtual BlockInstance<this> & createInstance(block_pos pos) = 0; 

    virtual void render(BlockInstance<this> & blockInstance) = 0; 
}; 

template <BlockType & blockType> 
class BlockInstance{ 
public: 
    block_pos && pos; 

    BlockInstance(block_pos & pos); 

    virtual void onClientUpdate() = 0; 
}; 
+4

@ πάνταῥεῖ : 템플릿 매개 변수는 유형, 클래스 또는 기타 형식 일 필요는 없습니다. –

+1

@ πάνταῥε that 그럴 경우'std :: integer_sequence'가 작동하지 않습니다. – NathanOliver

+0

@ 경계선 글쎄, 완전히 정확한 문구가 아닐 수도 있습니다. –

답변

2

이것은 당신이 당신의 프로그램을 컴파일 시간에 알려진 수량에 따라 (효과적으로) 코드 생성을위한 템플릿의 부적절한 사용입니다.

은 런타임에만 알려진 값이있는 포인터입니다.

당신이하려고하는 것이 무엇인지를 설명하지 않았으므로 여기서 구체적인 권고를하는 것은 어렵습니다. 그러나 포인터를 일반 함수 인수로 전달하려는 것 같습니다.

관련 문제