2017-03-10 5 views
1

저는 전임 C++ 프로그래밍을 처음 접했기 때문에 다양한 것들과 관련된 뉘앙스를 더 잘 이해하고자합니다.C++ 템플릿을 사용한 메서드 정의

저는 주로 작은 프로젝트에서 템플릿을 사용하고 있습니다. 주로 배울 때 코드를 작성하고 있습니다. 비주얼 스튜디오 나 (내 .H 파일에서 내 .cpp 파일에서)이 해당하는 코드를 생성 도움 :

template<class T> 
PriorityQueue<T>::ClimbDownHeap(const int currentNodeIndex) 
{ 
} 

template<class T> 
PriorityQueue<T>::GetRightNodeIndex(const int currentNodeIndex) 
{ 
} 

이 단지 유효한 될 것이라고하지만 내가 인상입니다 :

template <class T> 
class PriorityQueue 
{ 
public: 
    ClimbDownHeap(const int currentNodeIndex) 
    { 

    } 
private: 
    GetRightNodeIndex(const int currentNodeIndex) 
    { 
    } 
}; 

내 이해가 틀릴 수도 있지만, 지금까지 적어도 두 가지 모두 컴파일하는 것처럼 보일 것입니다. 이 두 스타일 사이에 중요한 차이점이 있습니까? 나는 더 깨끗하고 분명하기 때문에 두 번째를 선호합니다. 이들 사이의 뉘앙스는 무엇입니까?

참고 : 울퉁불퉁 한 열차에이 내용을 입력하면 문제가 발생하거나 코드가 명확하지 않은 경우 사과합니다 (정확하게 입력하지 않은 경우 입력 한 것임).

+2

소스 파일에 템플릿 정의를 넣는 것이 문제가 될 수 있습니다. 그것에 대해 자세히 알아 보려면 [this] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) 질문을 읽어보십시오. –

+0

[템플릿을 헤더 파일에만 구현할 수있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file) –

+1

I ** CppCon 2016 : Arthur O'Dwyer "템플릿 일반 프로그래밍"** [Part1] (https://www.youtube.com/watch?v=vwrXHznaYLA) 및 [Part2] (https : // www.youtube.com/watch?v=VIz6xBvwYd8) –

답변

1

다른 파일의 템플릿 클래스를 사용하려면 템플릿 코드를 헤더에 삽입해야합니다. 소스 파일을 퍼팅하는 것은 링크를 불가능하게함으로써 비공개로 만든다.

James가 의견에서 언급했듯이 자세한 설명과 예제 here을 읽습니다.

+0

만약 내가 그 해답을 올바르게 읽고 있는데, 나는 생각하지 않는다. 가장 간단한 해법은 .h 파일에있는 모든 시체를 정의하고 .cpp를 그냥 버리는 것이다. 이것은 Java 나 C#에서 제네릭보다 이해하기가 훨씬 어렵지만 적어도 개념상의 차이점과 성능에 미치는 영향을 생각합니다. – Caboose