C++ Chapter 13.8 : 멤버 함수를 한번 더 템플릿화 하기

Date:     Updated:

카테고리:

태그:

인프런에 있는 홍정모 교수님의 홍정모의 따라 하며 배우는 C++ 강의를 듣고 정리한 필기입니다. 😀
🌜 [홍정모의 따라 하며 배우는 C++]강의 들으러 가기!


chapter 13. 템플릿 : 멤버 함수를 한번 더 템플릿화 하기


#include <iostream>
#include <typeid>

using namespace std;

template<class T>
class A
{
private:
    T m_value;
public:
    A(const T & input)
        : m_value(input)
    {}
    
    template<typename TT>
    void doSomething(const TT & input)
    {
        cout << typeid(T).name() << " " << typeid(TT).name() << endl;
        cout << (TT)m_value << endl;
    }
  
    void print()
    {
        cout << m_value << endl;
    }
};

int main()
{
    A<int> a_int(123);
    a_int.print();
    
    a_int.doSomething<float>(123.4);
    a_int.doSomething(123.4);

    A<char> a_char('A');
    a_char.print();

    a_char.doSomething(int());
}
💎출력💎

123
int float
123
int double
123
char int
65

멤버 함수를 일반적인 다른 타입에 대해 템플릿화 할 수 있다.

  • 멤버 함수 doSomething은 TT라는 일반적인 타입 이름으로 한번 더 템플릿화 되었다.
    • typeid(T).name()
      • 멤버 함수를 호출하는 객체가 구체화 된 데이터 타입 이름
    • typeid(TT).name()
      • 멤버 함수가 구체화된 데이터 타입 이름
  • a_int.doSomething<float>(123.4);
    • 멤버 함수를 호출한 객체 a_intint로 구체화가 되었지만
    • 멤버 함수는 float으로 구체화 되었다.
      • 인수로 넘긴 123.4 은 double 타입이므로 float으로 자동 형 변환된다.
    • (TT)m_value : int이자 123인 m_value는 float인 TT로 형변환 되봤자 123이다.
  • a_int.doSomething(123.4);
    • 멤버 함수를 호출한 객체 a_intint로 구체화가 되었지만
    • 멤버 함수는 <타입>을 명시해주진 않았지만 인수가 double 타입이므로 이 멤버 함수는 dobule로 구체화 되었다.
    • (TT)m_value : int이자 123인 m_value는 double인 TT로 형변환 되봤자 123이다.
  • a_char.doSomething(int());
    • 멤버 함수를 호출한 객체 a_charchar로 구체화가 되었지만
    • 멤버 함수는 <타입>을 명시해주진 않았지만 인수가 int 타입이므로 이 멤버 함수는 int로 구체화 되었다.
    • (TT)m_value : char이자 ‘A’인 m_value는 int인 TT로 형변환되어 65가 된다.


🌜 개인 공부 기록용 블로그입니다. 오류나 틀린 부분이 있을 경우 
언제든지 댓글 혹은 메일로 지적해주시면 감사하겠습니다! 😄

맨 위로 이동하기

Cpp 카테고리 내 다른 글 보러가기

댓글 남기기