2012-10-01 6 views
3

안녕하세요. 언더 월드의 친애하는 사람들이 인터넷을 사용했습니다.템플릿 매개 변수없이 C++ 클래스 포인터

우리가 템플릿 매개 변수 (Y)과 X라는 클래스가 있다고 가정하자 :

template<class Y> 
class X 
{ 
    //... 
}; 

을 그리고 난 템플릿 매개 변수 (아직)하지 않고 클래스의 인스턴스를 생성 한 다음 포인터를 정의하고 싶었다 템플릿 매개 변수 사용 :

X* myClass; 

//.... 
myClass = new X<variable>(); 

어떤 방식 으로든 가능합니까?

+1

음, ** :'무효 * myClass가,'다음'myClass가 = 새로운 X ;'. –

답변

3

X는 템플릿 인수가없는 형식이 아니므로 아니요, 불행히도 아닙니다. X가 당신이 사용하고 싶은 인터페이스를 정의한 기본 클래스를 가지고 있다면 당신이 원하는 것을 얻을 수 있습니다. **, 그래 어떤 방법으로 예를 들어

,

struct Interface 
{ 
    Interface() {} 
    virtual ~Interface(){} 

    virtual void doSomething() = 0; 
}; 

template <class Y> 
class X : public Interface 
{ 
    //... 
    virtual void doSomething() override; 
}; 

std::unique_ptr<Interface> myClass; 

//.... 
myClass.reset(new X<variable>()); 
myClass->doSomething(); 
+0

'X '는 불완전한 형식이 아닙니다. 그것은 형식이 아닌 템플릿의 이름입니다. 불완전한 타입은'class C;'처럼 선언되었지만 정의되지 않은 타입입니다. –

+0

죄송합니다. 나는 그것을 고쳐 줄 것이다. –

3

아니요 포인터가 유형을 가리키며 X은 유형이 아닙니다.

2

과 동일하지 않습니다. 이 대안을 고려 : BaseX 이후

class BaseX { 
    //... 
}; 

template<class Y> 
class X : public BaseX 
{ 
    //... 
}; 

완전한 유형, 당신은 당신이 그것을 정의한 후 일부 X<Y>를 참조 BaseX*을 가질 수 있습니다.