NeuroWhAI의 잡블로그

[C++] Fold Expressions 본문

개발 및 공부/언어

[C++] Fold Expressions

NeuroWhAI 2018. 9. 5. 19:56



#include <iostream>

using namespace std;

template <typename... TArgs>
int binaryRightFold(TArgs&&... args)
{
    return (args - ... - 10);
}

template <typename... TArgs>
int binaryLeftFold(TArgs&&... args)
{
    return (10 - ... - args);
}

int main()
{
    cout << binaryRightFold(1, 2, 3, 4) << endl;
    // 1 - (2 - (3 - (4 - 10)))
    
    cout << binaryLeftFold(1, 2, 3, 4) << endl;
    // (((10 - 1) - 2) - 3) - 4
    // 10 - 1 - 2 - 3 - 4
    

    return 0;
}
8
0
그러니까 '...'이 파라미터 팩 왼쪽에 있느냐 오른쪽에 있느냐에 따라서 풀렸을때 괄호가 씌워지는 시작점이 다르다는 말입니다.
저는 쉽게 외우려고 "파라미터 팩 기준으로 '...'이 있는 방향으로 괄호가 깊어지며 풀린다."라고 생각하고 있습니다.
결합법칙이 성립하는 연산이면 딱히 상관 없겠지만 나눗셈이나 뺄셈 등은 아니므로 방향에 따라 연산 순서가 달라질 수 있으니 주의해야 합니다.
보통의 순서인 좌에서 우로 진행되는 연산을 원하면 '...'을 왼쪽에 두어서 left fold로 만들면 되겠죠.




Comments