본문 바로가기

분류 전체보기40

5일차 - 완벽한 전달자 (perfect forwarding) (2) Intro 이전 글에서 다루었던 우측값(rvalue)은 주로 두가지로 활용된다. 하나는 완벽한 전달자이고, 다른 하나는 move semantics이다. 이번 글에서는 첫번째 항목인 완벽한 전달자를 만드는 것에 초점을 맞추고자 한다. 우선 예전에 완벽한 전달자 (1)에서 다뤘던 lockAndCall 예제를 다시 살펴보자. #include using namespace std; void foo (int a) {} void goo (int& a) { a = 0; } // 함수 오버로딩을 사용한 perfect forwarding template void lockAndCall (F f, A& a) { f(a); } template void lockAndCall (F f, const A& a) { f(a); } in.. 2015. 9. 6.
5일차 - 우측값 (R-value) Intro 우선 우측값(rvalue)와 좌측값(lvalue)의 정의부터 확인해보자. 좌측값: =의 왼쪽과 오른쪽에 모두 올수 있는것, 대부분 이름이 있음. ex) 변수, 참조를 리턴하는 함수 우측값: =의 오른쪽에만 올수 있는것, 대부분 이름이 없음. ex) 상수, 값을 리턴하는 함수 간단한 예제를 살펴보자.int x = 10; int foo() { return x; } int& goo() { return x; } int n = 10; n = 10; // ok 10 = 20; // error foo() = 10; // error goo() = 10; //<.. 2015. 8. 24.
5일차 - 가변인자 템플릿 (variadic template) (2) 가변인자 템플릿의 활용 앞의 글에서는 가변인자 템플릿의 기본 문법들과 간단한 활용에 대해 다뤘다. 이번 글에서는 가변인자 템플릿을 조금 더 실용적으로 사용하고 있는 예제들을 살펴보고자 한다. 활용1 - xtuple 예전 Template 부분 전문화(2)에서 Recursive Duo를 선형화하는 기술로 Tuple을 다뤘었다. 그 때의 Tuple은 Duo 템플릿을 기반으로 만들어졌기 때문에 겉보기에도 복잡하고, 결정적으로 최대 5개의 타입만을 저장할 수 있다는 문제가 있었다. 하지만 가변인자 템플릿을 이용하면 인자의 개수 제한도 없고, 예전보다 훨씬 단순한 구조의 tuple을 만들 수 있다. 그럼 가변인자 템플릿을 이용한 tuple을 만들어보자. #include using namespace std; temp.. 2015. 8. 21.
5일차 - 가변인자 템플릿 (variadic template) (1) Variadic template 가변인자 템플릿은 템플릿의 타입 인자의 종류 및 개수가 가변적인 것을 말하며, 이는 C++ 11의 중요한 특징중 하나이다. 우선 가변인자 템플릿을 아주 심플하게 사용하는 예를 살펴보면서 기초적인 내용 정리를 해보자. template class Test {}; template void foo (Types ... args) {} int main(int argc, char* argv[]) { foo(1, 3.4, "a"); Test t; return 0; } Types는 여러 개의 '타입'을 나타내며, 주로 'Types', 'ARGS' 등의 단어를 관례적으로 많이 사용한다. 그리고 args는 Types에 부합하는 타입 객체들의 집합으로서, "parameter pack"이라고 부.. 2015. 8. 12.