C++ Chapter 13.3 : 자료형이 아닌 템플릿 매개 변수

Date:     Updated:

카테고리:

태그:

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


chapter 13. 템플릿 : 자료형이 아닌 템플릿 매개 변수

🔔 컴파일 타임에 정해지는 값으로만 구체화 된다.

#include <iostream>

template <typename T, unsigned int T_SIZE>  // ⭐
class MyArray
{
private:
    // int m_length;   ⭐
    T * m_data;   
public:
    MyArray()
    {
        m_data = new T[T_SIZE]; // ⭐
    }

    ~MyArray()
    {
        reset();
    }

    void reset()
    {
        delete [] m_data;
        m_data = nullptr;
        // m_length = 0;
    }

    T & operator [] (int index) // ⭐
    {
        assert (index >= 0 && index < T_SIZE); 
        return m_data[index];
    }

    int getLength()
    {
        return T_SIZE;   // ⭐
    }

    void print()
    {
        for (int i = 0; i < T_SIZE; ++i)  // ⭐
            std::cout << m_data[i] << " ";
        std::cout << std::endl;
    }
};
  • T_SIZEunsigned int형이며 템플릿 매개 변수가 된다.
    • 이 클래스 템플릿을 구체화 할 때 T_SIZE 자리에 unsigned int형 상수 리터럴을 넣어주면 된다.
      • 컴파일 타임에 결정되야 하기 때문에 ✨리터럴로 구체화✨ 해야 한다.
  • 멤버 변수 m_length가 필요 없어짐!
#include "MyArray.h"

int main()
{
    MyArray<double, 100> my_array;

    for (int i = 0; i < my_array.getLength();++i)
        my_array[i] = i + 65;

    my_array.print();

    return 0;
}
MyArray<double, 100> my_array;
  • T_SIZE 자리에 100이 들어간다.
    • 위 for문은 100번 돌게 된다!
    • my_array의 멤버 m_data의 크기는 100이 된다.
int a = 100;
MyArray<double, a> my_array;  // 💥에러💥
  • 일반 변수는 컴파일 때 메모리가 정해지는게 아니기 때문에 안된다.
const int a = 100;
MyArray<double, a> my_array;
  • const 상수는 컴파일 때 메모리가 정해지기 때문에 가능 !


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

맨 위로 이동하기

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

댓글 남기기