문제상황 : 다양한 크기의 배열을 인자로 받을 수 있는 함수를 만들려고 한다.
책에 나온대로라면, 함수 템플릿을 만들어서 해결한다고 한다.
템플릿으로 정의된 함수를 print(arr11);로 사용하고 싶다면, print가 템플릿으로 정의된 함수인 것을 main함수가 알아야한다. 이럴때 평소 습관대로 print 템플릿 함수를 문서 아래쪽에 적고 싶다면, c++의 매우 기본적인 문법인 전방선언을 해줘야 한다. 문제는, 바로 템플릿으로 정의된 함수를 전방선언하는 위치와 방법이다. 정답은 아래 코드이다.
// cppDataStructure.cpp : 이 파일에는 'main' 함수가 포함됩니다. 거기서 프로그램 실행이 시작되고 종료됩니다.
//
#include <iostream>
#include <array>
template <size_t N>
void print(std::array<int, N> arr);
int main()
{
std::array<int, 10> arr1;
arr1[0] = 1;
std::cout << "arr1 배열의 첫 번재 원소 : " << arr1[0] << std::endl;
std::array <int, 4> arr2 = { 1,2,3,4 };
std::cout << "arr2의 모든 원소";
for (int i = 0; i < arr2.size(); i++)
std::cout << arr2.at(i) << " ";
std::cout << std::endl;
try
{
std::cout << arr2.at(3) << std::endl; //에러아님
//std::cout << arr2.at(4) << std::endl; //std::out_of_range 에러 발생
}
catch (const std::out_of_range& ex)
{
std::cerr << ex.what() << std::endl;
}
std::array<int, 10> arr11 = { 1, 2, 3, 4, 5 };
print(arr11);
}
template <size_t N>
void print(std::array<int, N> arr)
{
for (auto ele : arr)
std::cout << ele << ", ";
}
어느 크기의 int 배열이든 쉽게 사용 가능하다.