[C++11] std::tuple의 std::get 함수에 대해 알아보자. (특히 std::get<Type>()에 대해)
By Lusain's Blog ─ Programing &amp; Novel Review + | 2018년 2월 21일 |
![[C++11] std::tuple의 std::get 함수에 대해 알아보자. (특히 std::get<Type>()에 대해)](https://img.zoomtrend.com/2018/02/21/f0084961_5a8da74f02740.png)
std::tuple은 여러 개의 값을 묶는 고정 크기 C++ 표준 컬렉션이다. std::pair는 2개의 값만 묶는데, 이보다 일반화된 컬렉션이 std::tuple이다. std::tuple은 처음 보면 쓰기 꽤 난감하다. 일단 멤버에 접근하는 멤버 함수가 없다. std::tuple에 접근하는 방법은 std::get을 사용하는 것이다. std::get은 템플릿 함수이다. 거의 같은 내용으로 cv-idntifier 등의 차이 때문에 8개의 오버로딩이 있지만, 큰 차이가 없다. 그 중 간단한 쪽 두 개를 들고왔다. // FUNCTION TEMPLATE get (by index) template<size_t _Index, class... _Types>
[C++] 캐스팅 연산자: static_cast / dynamic_cast
By Lusain's Blog ─ Programing &amp; Novel Review + | 2016년 11월 20일 |
C 에서, int를float로 바꾸고 싶은 경우가 종종 있다. 예를 들어 정수 두 개를 나누어 소수점을 얻고 싶을 때. int a = 1;int b = 2; a / b = 0.5 라는 값을 얻고 싶다면 어떻게 해야 할까? 일단 말 그대로 a / b를 하면 값이 0이 나오게 된다. 정수 형식 간의 나누기 연산은 몫(/)과 나머지(%)로 나뉘기 때문이다. 이 경우에는 몫은 0, 나머지 1 이 되기 때문에 원하는 값을 얻지 못한다. 문제를 해결하기 위한 가장 간단한 방법은, (float)a / (float)b 같이 값 앞에 괄호로 감싼 변환 형을 적는 것으로 형 변환을 하는 것이다. 이 때, 변환 형은 표준 변환에 따라 변환 가능한 형식이어야 한다. 표준 변환 |이런 변환은 C 스타일의 명시적 형 변환이라고 하
벡터로 위치이동
By Lim's Studio | 2013년 1월 16일 |
보통 간단한 이동을 구현한다면, 좌로 이동할 때 x-=1; 아래로 이동할 때 y+=1;처럼 코딩하기 마련이다. 그러니까, if(GetAsyncKeyState(VK_LEFT))x-=1; else if(GetAsyncKeyState(VK_RIGHT))x+=1; if(GetAsyncKeyState(VK_UP))y-=1; else if(GetAsyncKeyState(VK_DOWN))y+=1; 이런식으로 말이다. 그런데 저 말대로 한다면 상하좌우 각각의 4방향 이동은 문제 없겠지만, 4가지 대각선 방향을 이동할 때 약간의 문제가 생긴다. 상하좌우의 경우는 각각 1만큼 움직일 테지만, 대각선은 두 키의 명령이 같이 이행됨에 따라 결과적으로 root 2만큼 움직여 버리는 것이다. 이를
[C++] 특정 멤버 함수가 있는지 판별하기(std::declval을 사용하여)
By Lusain's Blog ─ Programing &amp; Novel Review + | 2018년 8월 27일 |
템플릿 인자에 특정 함수가 있는지 확인하고 싶을 때가 있다. 예를 들어, 입력이 들어오면 정수를 반환하는 단순한 템플릿 클래스를 구현하려고 한다. template <typename Ty> int GetVal(Ty val) { return (int)val; } 이 때 primitive type(char, short, int, long, float, double…)이 아닐 경우에는 컴파일이 실패하지만, length() 함수가 있으면 그 값을 반환하게 하고 싶다. 예시로, std::string의 경우부터 처리해보자. 템플릿 특수화(TemplateSpecialization)을 사용하여 처리한다. template <> int GetVal(std::string val) {