카테고리 없음

c++ 배열을 함수 인자로 받으려는 함수 템플릿

시도하고 시도 2022. 12. 1. 19:48

문제상황 : 다양한 크기의 배열을 인자로 받을 수 있는 함수를 만들려고 한다.

문제상황: user-defined-conversion이 안된다고 한다.

책에 나온대로라면, 함수 템플릿을 만들어서 해결한다고 한다.

 

템플릿으로 정의된 함수를 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 배열이든 쉽게 사용 가능하다.