[모던C++입문] 3.10 가변 템플릿

    3.10 가변 템플릿(Variadic Template)

    • 가변 템플릿은 ...으로 표시된 줄임표 연산자를 사용
    • 왼쪽에 ... 연산자가 있으면 패킹 오른쪽에 ... 연산자가 있으면 언패킹
      • typename ...P : 복수의 타입 인수를 타입 팩 P에 패킹
      • <P...> : 클래스나 함수템플릿을 인스턴스화 할때 P를 언패킹
      • P ...p : 변수 팩 p에 여러 함수 인수를 패킹
      • sum(p...) : 변수 팩 p를 언패킹하고 여러 인수로 sum함수 호출
    • 리턴타입은 첫번째 인수의 타입으로 정해짐
    template<typename T>
    inline T sum(T t) { return t; }
    
    template<typename T, typename ...p>
    inline T sum(T t, P ...p)
    {
        return t + sum(...p);
    }
    
    auto s = sum(-7, 3.7f, 9u, -2.6);
    cout << "s is " << s << " and its type is " << typeid(s).name() << endl;
    //s is 2 and its type is int
    
    auto ss = -7 + 3.7f + 9u + -42.6;   //ss는 double 타입 값은 3.1
    반응형

    댓글

    Designed by JB FACTORY