이봐 알렉스 장 클래스 코드 및 헤더 파일 당신은 클래스 아래에 정의 할 때 정상 함수는 하나의 정의 규칙의 대상이지만 템플릿 함수는 또한 세 가지 파일 접근 방식에서 우리가 명시적으로 클래스를 인스턴스화하지만 말했다 이유가 아니라고 말했다 형식이 사용자 정의 데이터 형식인 경우 이를 처리하는 방법은 무엇입니까? 또한 벡터와 배열은 세 개의 파일로 설명한 것과 동일한 방식으로 구현되는데, 각 프로그램에 대해 template.cpp를 유지 관리해야 한다고 말했기 때문에 템플릿 함수는 템플릿 함수와 동일한 방식으로 인스턴스화됩니다. 템플릿 매개 변수를 사용자가 필요로 하는 실제 데이터 유형으로 대체한 다음 복사본을 컴파일합니다. 템플릿 클래스를 사용하지 않으면 컴파일러도 컴파일하지 않습니다. 컴파일러가 템플릿을 사용하려면 선언이 아닌 템플릿 정의와 템플릿을 인스턴스화하는 데 사용되는 템플릿 형식을 모두 볼 수 있어야 합니다. 또한 C++는 파일을 개별적으로 컴파일한다는 것을 기억하십시오. Array.h 헤더가 기본#included 경우 템플릿 클래스 정의가 main.cpp로 복사됩니다. 컴파일러에 Array 및 Array 라는 두 개의 템플릿 인스턴스가 필요하다고 생각하면 이를 인스턴스화하고 main.cpp의 일부로 컴파일합니다. 그러나 Array.cpp를 별도로 컴파일하면 Array 및 Array 필요하므로 템플릿 함수가 인스턴스화되지 않도록 잊어 버릴 것입니다. 따라서 컴파일러가 Array::getLength() 또는 Array::getLength()에 대한 정의를 찾을 수 없기 때문에 링커 오류가 발생합니다. 템플릿 클래스를 이해하려면 템플릿 또는 클래스 정의의 일부를 제외한 모든 위치에 있는 식별자 A_Type을 int 키워드로 바꾸는 것을 생각해 보십시오. 위의 클래스와 동일합니다. 이제 클래스 석회화의 개체를 인스턴스화할 때 클래스가 처리할 데이터 유형을 선택할 수 있습니다. 일반적으로 코드를 작성할 때 콘크리트에서 추상으로 선행하는 것이 가장 쉽습니다.

따라서 특정 데이터 형식에 대한 클래스를 작성한 다음 템플릿-일반- 클래스로 진행하는 것이 더 쉽습니다. 그 간결함은 재치의 영혼, 이 예는 간단하고 따라서 거의 실용적인 응용 프로그램의 것입니다. C++는 템플릿을 지원하는 두 개의 새 키워드인 `템플릿`과 `유형 이름`을 추가합니다. 두 번째 키워드는 항상 `클래스`라는 키워드로 대체할 수 있습니다. 이제 정수에 완벽하게 잘 작동하는 완벽하게 무해한 작은 클래스가 있습니다. 하지만 부동 포인트 번호에 대해 동등하게 잘 작동하는 일반 클래스를 원한다고 결정하면 어떨까요? 우리는 템플릿을 사용합니다. std::array.size()의 반환 형식이 std::array:size_type인 이유를 아직도 이해하지 못합니다. cppreference와 같은 웹 사이트를 들여다 보면 반환 유형이 저트 size_type이라고 말합니다. 물론 이것은 나를 조금 혼란스럽게 만듭니다. 반환 유형에 대한 완전한 템플릿 사양이 필요한 이유는 무엇입니까? 다시 말하지만, 어쩌면 내 VS는 이제 행렬 / Linear방정식을 클래스 본문에 배치하지 않고 생성 할 수 있기 때문에 버그가있었습니다. 많은 기능이 지금 제대로 작동하지만, 내 친구 연산자가 아닌 (정말 비)가 아닌 것을 볼 수있는 방법. 어쩌면 템플릿 친구 함수에 대한 구문을 모르는가? 현재 는 행렬에 대한 operator<< 선언과 다음과 같습니다.

템플릿 정의 후 아무 곳이나 프로그램에 표시될 수 있으며 지정된 인수 목록의 경우 전체 프로그램에서 한 번만 표시될 수 있습니다. 첫째로이 모든 분수와 함께 일하고 잘 작동했습니다. 내 복잡한 클래스를 작성하는 것은 템플릿 방식으로이 컨테이너를 다시 작성하는 이유였습니다. 그 시간 동안 클래스 선언과 정의를 이미 분할했으며 클래스, 함수, 변수 및 멤버 템플릿 특수화와 같은 관련 항목을 컴파일 한 후 템플릿에서 명시적으로 인스턴스화 할 수 있습니다.