고수준 언어에서는 함수에 오버로드를 사용하는데, 이는 동일한 매개변수 수를 가진 다른 함수에 사용되며, 서로 다른 타입과 같은 매개변수 수에 대해 템플릿이 필요합니다
C++ 애플릿
- #include<iostream>
- using namespace std;
- template <class T>
- T max(T a,T b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a,b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
코드 복사 간단한 예시입니다: 키워드 template<class T>는 템플릿 구조의 시작으로, 최대 값을 찾을 때 같은 함수로 여러 개의 C++ 코드를 반복해서 작성할 필요가 없습니다 함수를 호출할 때 그 타입이 자동으로 매칭된다는 점에 유의하세요. 굳이 보여줄 필요는 없습니다. 위의 용법이 가장 기본적인 것이지만, 다음과 같은 상황을 마주하게 될 것입니다
- #include<iostream>
- using namespace std;
- template <class T,class E>
- E max(T a,E b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a;float b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
코드 복사 함수가 두 가지 다른 타입을 필요로 할 때 무엇을 해야 하는지, 위 코드를 읽어보면 이해하실 수 있을 것 같습니다. 어쨌든, 이 둘이 공통적으로 가진 점은 타입이 자동으로 매칭된다는 것입니다. 사실, 타입을 잘 매칭하지 못하면, 즉 '수컷 머리가 맞지 않는다'는 실수도 있습니다. 컴파일러의 자동 매칭이 암묵적 타입 변환 규칙에 따라 매개변수 타입을 변경하여 결국 결과의 정확도 손실로 이어집니다. 코드를 보면 시도해 볼 수 있습니다.
- #include<iostream>
- using namespace std;
- template <class T,class E>
- E max(T a,E b)
- {
- return a>b?a:b;
- }
- int main()
- {
- int a;float b;cin>>a>>b;
- cout<<max(a,b);
- return 0;
- }
코드 복사 위 내용은 그렇게 어렵지 않지만, 탐험할 수 있는 곳도 많습니다. 여러분의 의견은 어떨지 모르겠습니다 |
|