2012-07-02 3 views
1

몇 가지 코드입니다. C++에서는 템플릿 가상 함수를 만들 수 없다는 것을 알고 있습니다. 어떤 대안이 있습니까?템플릿 여기에 가상 함수

+1

비슷한 질문 : http://stackoverflow.com/questions/7648430/designing-hiearchical-classes-with-template-function/7648621#7648621 – jpalecek

+2

다른 : HTTP와 같은 경우에, 당신은 캐스팅 할 필요가 : //stackoverflow.com/questions/7968023/c-virtual-template-method – jpalecek

답변

2

귀하의 구체적인 필요에 따라 다릅니다.

template<typename T> 
class IWorker { 
public: 
    virtual void Do(T x) const = 0; 
}; 

template<typename T> 
class TSomeWorker : public IWorker<T> { 
    void Do(T x) const { 
     // ... 
    } 
}; 
+0

여기에서 문제는 다른 클래스에서 IWorker 클래스를 사용할 때 템플릿이되도록해야한다는 것입니다. 그러나 그들은 그렇지 않습니다. 클래스의 특성에 따라 funciton Do 만 템플릿 화됩니다. – typedef

+0

일반화 된 솔루션은 @jpalecek 링크에 설명되어 있습니다. 문제에 대한보다 구체적인 해결책을 원한다면 더 많은 맥락을 제시해야합니다. – tenfour

0

그래서, 당신은 정적 다형성 (템플릿)을 혼합 및 런타임 다형성 (가상 함수)를하고 싶지만, 사람들은 직교 :하지만에 따라 무엇을 당신은 내가 제안 기록했다.

class IWorker { 
public: 
    virtual void Do(void* x) const = 0; 
}; 

template< typename T > 
class TSomeWorker : public IWorker { 
    void Do(void* x) const { 
     T* realX = reinterpret_cast< T* >(x); 
     // ... 
    } 
};