#include "MyArray.h"
// MyArray에서 int 뿐 아니라 다른 타입의 array를 만들고 싶으면
// template<typename T> 로
// T *m_data; 로 정의한다.
// void print()를 클래스 바깥에서 정의하고 싶다면
// void MyArray<T>::print()
//{
// for (int i=0;i<m_length;++i)
// std::cout << m_data[i] << " ";
// std::cout << "\n";
//} 와 같이 정의해준다.
// 하지만 이 함수 바디를 cpp 파일로 옮기게 되면 에러가 발생하게 되는데,
// main()에서 MyArray<double>로 데이터 타입을 정해주었는데, MyArray.h만을 include 해주었으므로
// 컴파일할 때 MyArray.cpp 파일에서는 데이터타입을 알 수가 없다.
// 이것을 해결하기 위해 explicit instantiation을 사용한다.
// template void MyArray<double>::print(); // 이 print라는 멤버함수를 double 타입의 인스턴시에이션을 할거니까 빌드를 이렇게 해라 라고 알려줌
// class 자체를 explicit 해줄 수도 있다.
// template class MyArray<double>;
int main()
{
// MyArray my_array(10);
MyArray<double> my_array(10); // T로 정의할 땐 데이터타입을 정의해줘야한다.
for (int i=0; i<my_array.getLength(); ++i)
my_array[i] = i * 0.5;
my_array.print();
return 0;
}