나는 서로 다른 클래스들을 모두 계층 구조로 배열했다. 코드 양을 줄이기 위해 필자는 템플릿 기능을 만들기 시작했습니다. 기본 클래스는 템플릿 함수를 사용하고 일부 파생 클래스는 동일한 함수를 사용합니다. 내가 그런 것처럼 정의되지 않은 참조 문제가 생기지 않도록 이러한 템플릿을 모두 넣을 수 있습니까? 모든 정의를 헤더 파일에 넣은 다음 함수를 호출하는 클래스의 .cpp 부분에 헤더 파일을 포함시켜야합니다. 그게 효과가 있니? 지금 당장은 모든 클래스 (class.cpp, class.h)가 잘 컴파일되지만 링크하는 동안 모든 것이 불어납니다. 모든 템플릿을 네임 스페이스에 넣고 그 네임 스페이스를 모든 클래스의 구현에 포함 시키려고했지만 작동하지 않습니다. 내 질문은, 당신은 어떻게 모든 클래스가 데이터 멤버에 사용할 수있는 템플릿 함수를 보유하고 별도의 엔티티를 만드는 것에 대해 갈 것이라고?(C++) 내 템플릿은 어디에 둘까요?
1
A
답변
1
나는이 문제로 많은 사람들을 혼란스럽게 보았습니다. 템플릿은 유형이 아닙니다. 인스턴스화 될 때 유형이됩니다. 이러한 이유 때문에 템플리트의 구성원은 사용하려는 동일한 데이터 단위에 있어야합니다.
템플릿이 일반적이고 모든 코드에서이 템플릿을 사용하려면 헤더 파일에 모든 것을 넣기 만하면됩니다.
선언과 정의 및 구현을 모두 동일한 파일에 표시하는 것을 좋아하지 않는다면 템플릿을 두 개의 다른 파일로 나눌 수 있습니다.
예를 들어, 선언과 함께 "list.h"및 구현과 함께 "list.inc".
작동하려면 두 가지를 모두 포함해야합니다.
2
템플릿 함수 및 템플릿 클래스의 정의는 .cpp 파일이 아니라 헤더 파일에 속합니다.
이것은 컴파일러가 기본적으로 헤더에있는 파일에 사용 된 각 템플릿 매개 변수 집합에 대해 새로운 기능을 생성해야하기 때문입니다. 템플릿 함수가 .cpp 파일에 정의 된 경우, 호출 코드가 어떻게 생겼는지 모른 채 모든 함수 버전을 생성해야하며 기본적으로 불가능합니다. (이런 식으로 템플릿 함수의 중복 정의를 얻지 만, 링커는 그것들을 제거하고 최종 바이너리에서 각각의 템플릿 인스턴스화가있을 경우 단 하나의 복사본 만 만들도록합니다.)
관련 문제
- 1. 내 taglib 선언은 어디에 둘까요?
- 2. C# : "save()"메서드를 어디에 둘까요?
- 3. gvimrc와 vimrc를 어디에 둘까요?
- 4. 루트 컨트롤러를 어디에 둘까요?
- 5. jQuery.expr 코드는 어디에 둘까요?
- 6. 뷰 로직을 어디에 둘까요?
- 7. 제한 조항을 어디에 둘까요?
- 8. DQL을 어디에 둘까요?
- 9. C#에서 외부 DLL을 어디에 둘까요?
- 10. robots.txt 파일을 어디에 둘까요?
- 11. 내 시각적 웹 개발자 템플릿은 어디에 있습니까?
- 12. ELMAH 바이너리 파일을 어디에 둘까요?
- 13. Windows에서 libqca2 플러그인을 어디에 둘까요?
- 14. Qt : connect 문을 어디에 둘까요?
- 15. 데이터 주석 태그는 어디에 둘까요?
- 16. 이맥스 : psvn.el 파일을 어디에 둘까요?
- 17. 레일 - 데이터 파일을 어디에 둘까요?
- 18. xcode의 모든 템플릿은 어디에 있습니까?
- 19. 내 Grails 앱에서 액세스 할 수있는 상수 클래스를 어디에 둘까요?
- 20. 내 번들은 이클립스/춘분에 따라 달라 지므로 번들을 어디에 둘까요?
- 21. Rails 모델을위한 복잡한 디스플레이 로직을 어디에 둘까요?
- 22. POCO를 사용할 때 비헤이비어 로직을 어디에 둘까요?
- 23. DDD 방식으로 "ViewModel 클래스"를 어디에 둘까요?
- 24. PHP에서 생성 된 .htpasswd를 어디에 둘까요?
- 25. 사용자 지정 RichFaces my.skin.properties 파일을 어디에 둘까요?
- 26. 자바 - 응용 프로그램 데이터를 어디에 둘까요?
- 27. Spring MVC에서 애플리케이션 레벨 빈을 어디에 둘까요?
- 28. java ee 6 원격 인터페이스를 어디에 둘까요?
- 29. @Transactional을 어디에 둘까요? 인터페이스 사양 또는 구현에서?
- 30. 언제든지 일어날 수있는 이벤트 코드를 어디에 둘까요?
[템플릿을 헤더 파일에만 구현할 수있는 이유는 무엇입니까?] (http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header- 파일) –