Notice
Recent Posts
Recent Comments
NeuroWhAI의 잡블로그
[C++] Fold Expressions 본문
#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로 만들면 되겠죠.
저는 쉽게 외우려고 "파라미터 팩 기준으로 '...'이 있는 방향으로 괄호가 깊어지며 풀린다."라고 생각하고 있습니다.
결합법칙이 성립하는 연산이면 딱히 상관 없겠지만 나눗셈이나 뺄셈 등은 아니므로 방향에 따라 연산 순서가 달라질 수 있으니 주의해야 합니다.
보통의 순서인 좌에서 우로 진행되는 연산을 원하면 '...'을 왼쪽에 두어서 left fold로 만들면 되겠죠.
'개발 및 공부 > 언어' 카테고리의 다른 글
[C++] CTAD; User-defined deduction guides (사용자 정의 템플릿 인자 추론 가이드) (0) | 2018.09.10 |
---|---|
[C++] C++17의 Template argument deduction (템플릿 인자 추론) (0) | 2018.09.09 |
[C++] lock tag(defer_lock, try_to_lock, adopt_lock) 설명 + scoped_lock (0) | 2018.08.26 |
[Rust] in/exclusive range expression and pattern (0) | 2018.08.25 |
[C++] std::void_t를 이용해 클래스에 특정 멤버가 있는지 확인하기. (0) | 2018.08.05 |
Comments