2012-03-26 8 views
-2

나는 다음과 같은 템플릿 방법은 내 인터페이스에 선언 있습니다클래스 방법 템플릿 인수 목록

class IObjectFactory 
{ 
public: 
    virtual ~IObjectFactory() { } 

    virtual int32_t Init() = 0; 
    virtual bool Destroy() = 0; 
    virtual bool Start() = 0; 
    virtual bool Stop() = 0; 
    virtual bool isRunning() = 0; 
    virtual void Tick() = 0; 

    template <class T> 
    Object<T> CreateObject(T); 
}; 

나는 전화가 생각처럼 보이는 방법을 모르겠습니다. 나는 다음과 같이 충분하다고 생각했다. 여기서 mObjFactory은 앞서 언급 한 가상 클래스의 구현이다.

inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(); } 

내가 오류가 이다 "함수 템플릿의 어떤 인스턴스는 인수 목록과 일치하지 않습니다" 무엇을 같은 적절한 함수 호출 모습?

(도 - (!) 참고로, 괜찮 인터페이스에 템플릿 방법을 선언하고 사용자가이를 구현 요구하는 가상 선언 할 수 없기 때문에?)

감사

답변

1

주의 :

template <class T> 
Object<T> CreateObject(T); 

하셨습니까

template <class T> 
Object<T> CreateObject(); 

?

inline void AllocateWithMemPoolAux() { mObjFactory->CreateObject<TestClass1>(TestClass1()); } 
:

mObjFactory->CreateObject<TestClass1>(); 

당신이 형 TestClass1의 목적을 전달해야

0

이 오류를 얻고있다 왜냐하면 여러분은 TestClass1의 객체를이 메소드에 전달하지 않기 때문입니다.

제대로 같을 것이다 코드를 컴파일 : 나는 당신의 AllocateWithMemPoolAux()가 여기에 표시보다 더 많은 부작용을 가지고 가정

inline void AllocateWithMemPoolAux() 
{ 
    TestClass1 tObj; 
    mObjFactory->CreateObject<TestClass1>(tObj); 
} 

; 최소한 CreateObject 함수의 반환 값을 사용하여 무언가를 수행해야합니다.이 함수 대신 참조로 객체를 전달하는 것이 좋습니다.

0

템플릿 함수

template <class T> 
Object<T> CreateObject(T); 

T 하나 인수 걸린다. 너는 그것없이 그것을 불렀다.

0

당신은 인수없이 메소드를 호출