가변길이 template

강한친구·2022년 3월 4일

C / CPP

목록 보기
10/19

여러개 출력하기

파이썬의 가장 강력한 기능중의 하나는

print(a, b, c)

같이 여러개를 동시에 출력하는 기능이다.

놀랍게도, cpp에서도 같은걸 가변길이 템플릿을 이용해서 구현할 수 있다.

# include <iostream>

template <typename T>
void print(T arg) {
    std::cout << arg << std::endl;
}

template <typename T, typename... Types>
void print(T arg, Types... args) {
    std::cout << arg << ", ";
    print(args...);
}

int main() {
    print(1, 3.1, "abc");
    print(1, 2, 3, 4, 5, 6, 7);
}

typmename 뒤에오는것들은 template parameter pack,
인자로 오는 ...은 함수 parameter pack이라 부른다.

작동원리는 다음과 같다.
1. print(1, 3.1, "abc") 안에 몇개의 인자가 있는지 파악한다. 해당 케이스는 2개 이상의 인자가 있다. 따라서 2번째 print를 실행한다.

  1. 2번째 print가 실행되면, 1이 T arg에 들어가고 나머지 3.1 abc가 args에 들어가게 된다.

  2. 1은 출력되고, print(args...)에는 나머지 인자들 (3.1 abc)가 들어가게 된다.

  3. 위의 과정을 반복해서 print()안에 하나만 남을때까지 반복한다.

  4. 하나만 남았다면, 첫번째 print(인자가 하나)를 실행하고 종료한다.

유의할 점은, 두 print의 순서가 바뀌면 오류가 난다는점이다. 이는 각 함수는 자신보다 먼저 선언된 함수만 인식하기 때문이다.

문자열 합치기

python에서는 문자열사이를 + 처리하면 알아서 합쳐진다. cpp에서도 비슷하게 구현할 수는 있다.

str = s1 + s2 + s3

하지만 이러한 과정은 각 문자열이 합쳐질때마다 메모리 할당을 요구한다. 따라서 이를 개선해야 한다.

즉, 메모리를 아예 처음부터 한번에 할당하는것이다.

이에 대한 방법은 이 글을 보는게 빠를것같다.

0개의 댓글