본문 바로가기
c++/template프로그래밍.

template..packexpansion..

by kcj3054 2022. 5. 16.

pack_expansion

  • packExpansion은 팩들을 나열한다고 팩 expansion이라고한다.. 여기서 parameterpack을 다루는 방법들을 소개합니다.

  • 파라미터팩을 사용하는 방법은 파라미터팩패턴뒤 바로 ...을 해주면된다 -> "parameterpack"...

소스 코드

#include <iostream>

using namespace std;

//pack expansion..

int hoo(int n)
{
    return -n;
}
void goo(int a, int b, int c)
{
    cout << a << " " << b << " " << c << endl;
}
template<typename... Types>
void foo(Types... args)
{
    //parameter pack을 사용하는 방법은
    //"parameter pack을 사용하는패턴"뒤에 바로 ...을 해주면
    // -> 패턴(e1), 패턴(e2), 패턴(e3)..이된다.
    int x[] = { args... }; // pack expansion {1, 2, 3} 

    for (auto n : x)
        cout << n << endl;

    int y[] = { (++args)... }; // {++e1, ++e2, ++e3}  -> 2, 3, 4


    //int z[] = { hoo(args...) }; // hoo(1, 2, 3) error
    int z[] = { hoo(args)... }; // hoo(1) hoo(2) hoo(3)

    goo(hoo(args)...); // goo(hoo(1), hoo(2), hoo(3));
}

int main()
{
    foo(1, 2, 3); // Types : int, int, int
                    // args : 1, 2, 3.. 

    return 0;
}