2017-11-28 2 views
1

알아 두어야 할 것은 : C++ 템플릿 클래스로 리팩토링 할 수있는 방법이 있습니까? 기본 클래스 또는 특수 템플릿의 가상 함수를 신속하게 삽입하려고합니다.Qt Creator 리팩터링 및 C++ 템플릿

클래스가 충분히 크지 않은 경우 문제가되지 않습니다. 그러나 당신이 오버라이드하고 전문화해야하는 10 가지 방법이 있다면, 일상적이고 오류가 발생하기 쉽습니다.

예를 들어, 내가 그 코드를 작성하는 것보다이 코드

template <typename T> 
class MyTemplateInterface 
{ 
public: 
    virtual void DoWork() = 0; 
}; 

template <typename T> 
class MyTemplateClass : public MyTemplateInterface<T> 
{ 
public: 
    MyTemplateClass() {} 
}; 

그리고 제가 얻고 싶은 것은

template <typename T> 
class MyTemplateClass : public MyTemplateInterface<T> 
{ 
public: 
    MyTemplateClass() {} 
    void DoWork() override 
    { 

    } 
}; 
template<> 
void MyTemplateClass<int>::DoWork() 
{ 
    // specialized template 
} 

추신 그 내 깨진 영어에 대한 미안.

+0

https://doc.qt.io/archives/qq/qq15-academic.html – Taz742

+0

답변 해 주셔서 감사합니다. 이 기사에서는 Qt가 템플릿을 지원하지 않지만 순수한 C++ 코드를 사용한다고 말합니다. 그래서 Qt가 그것을 지원하지 않는다면, Qt Creator도 그렇게하지 않을 것이라고 생각합니까? 어쩌면이 문제를 해결할 수있는 또 다른 간단한 방법이 있을까요? –

답변

1

IDE가 올바른 가상 메소드를 생성하기 만하면 Qt Creator에서 가능합니다. 이 옵션을 사용할 수있는 버전부터 확실하지 않습니다. Qt 4.1.0을 사용하고 있습니다.

지정한 코드가 있으면 파생 클래스 이름을 마우스 오른쪽 단추로 클릭하고 아래 이미지에서 Refactor > Insert Virtual Functions of Base Classes을 선택할 수 있습니다.

enter image description here

그럼 당신은 당신은 단지 선언이나 정의는 내부 또는 클래스 외부에서 생성할지 여부에 다른 옵션을 선택할 수 있습니다.

잘하면이 질문에 대한 답을 얻을 수 있습니다. 그러나 나는 현재 전문화의 반자동 생성을위한 방법이 있는지 확실하지 않습니다.

+0

고마워요! Qt Creator 4.3.1을 사용하고 있는데 템플릿이있는 "Insert Virtual Function in Base Classes"가 없지만 템플릿이없는 클래스에서이 기능을 적극적으로 사용하고 있습니다. 물론, 그것은 내 질문에 대한 부분적인 대답이다. –