이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 13940|회답: 0

[C++] C++에서 템플릿에 대해 생각하기

[링크 복사]
게시됨 2014. 10. 4. 오후 8:45:19 | | |
고수준 언어에서는 함수에 오버로드를 사용하는데, 이는 동일한 매개변수 수를 가진 다른 함수에 사용되며, 서로 다른 타입과 같은 매개변수 수에 대해 템플릿이 필요합니다
C++ 애플릿

  1. #include<iostream>
  2. using namespace std;

  3. template <class T>
  4. T max(T a,T b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a,b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
코드 복사

간단한 예시입니다: 키워드 template<class T>는 템플릿 구조의 시작으로, 최대 값을 찾을 때 같은 함수로 여러 개의 C++ 코드를 반복해서 작성할 필요가 없습니다
함수를 호출할 때 그 타입이 자동으로 매칭된다는 점에 유의하세요. 굳이 보여줄 필요는 없습니다.
위의 용법이 가장 기본적인 것이지만, 다음과 같은 상황을 마주하게 될 것입니다

  1. #include<iostream>
  2. using namespace std;

  3. template <class T,class E>
  4. E max(T a,E b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a;float b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
코드 복사

함수가 두 가지 다른 타입을 필요로 할 때 무엇을 해야 하는지, 위 코드를 읽어보면 이해하실 수 있을 것 같습니다. 어쨌든, 이 둘이 공통적으로 가진 점은 타입이 자동으로 매칭된다는 것입니다.
사실, 타입을 잘 매칭하지 못하면, 즉 '수컷 머리가 맞지 않는다'는 실수도 있습니다. 컴파일러의 자동 매칭이 암묵적 타입 변환 규칙에 따라 매개변수 타입을 변경하여 결국 결과의 정확도 손실로 이어집니다.
코드를 보면 시도해 볼 수 있습니다.
  1. #include<iostream>
  2. using namespace std;

  3. template <class T,class E>
  4. E max(T a,E b)
  5. {
  6. return         a>b?a:b;
  7. }

  8. int main()
  9. {
  10. int a;float b;cin>>a>>b;
  11. cout<<max(a,b);
  12. return 0;
  13. }
코드 복사
위 내용은 그렇게 어렵지 않지만, 탐험할 수 있는 곳도 많습니다. 여러분의 의견은 어떨지 모르겠습니다





이전의:c 인라인이 작성한 미니 프로그램
다음:포럼에 올린 로고를 올려서 모두에게 보여줬어요!
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com