[C++] 캐스팅 연산자: static_cast / dynamic_cast
By Lusain's Blog ─ Programing & 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 & 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) {
지형 충돌과 이동에 관한 고찰
By Lim's Studio | 2013년 1월 16일 |
![지형 충돌과 이동에 관한 고찰](https://img.zoomtrend.com/2013/01/16/b0073118_50f568e0a8b04.png)
오늘은 지형 충돌에 대해 생각해 봤다. 처음 생각난 것은 모두 사각형으로 비교해서 충돌하려고 했는데, 그렇게 하면 경사면같은 물체는 이동할 수 없게돼서 포기했다. 또 그 경사면들만 따로 만들어 주자니, 개수에 너무 제한적이었다. 두 번째로 떠오른 것은 사격형과 선분끼리 충돌시키는 것이었다. 캐릭터들은 어차피 사각형 마스크로 비교하니까 그렇게 하면 될 것 같았다. 그래서 캐릭터 마스크 에디터 만들 때 처럼 충돌 선분을 직접 그려서 숫자로 뽑으려고 했는데 이건 알고리즘 짜기가 여간 복잡한게 아니었다. 점끼리 연결상태 파악하기가 쉽질 않았다. 그래서 맵 에디터를 만들면서 그 위에 직접 선분을 그을 수 있게 만들어 버리도록 생각을 해보니 그렇게 하면 될 듯 싶어서 생각은 그 쯤에서 마쳤다.