[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)
오늘은 지형 충돌에 대해 생각해 봤다. 처음 생각난 것은 모두 사각형으로 비교해서 충돌하려고 했는데, 그렇게 하면 경사면같은 물체는 이동할 수 없게돼서 포기했다. 또 그 경사면들만 따로 만들어 주자니, 개수에 너무 제한적이었다. 두 번째로 떠오른 것은 사격형과 선분끼리 충돌시키는 것이었다. 캐릭터들은 어차피 사각형 마스크로 비교하니까 그렇게 하면 될 것 같았다. 그래서 캐릭터 마스크 에디터 만들 때 처럼 충돌 선분을 직접 그려서 숫자로 뽑으려고 했는데 이건 알고리즘 짜기가 여간 복잡한게 아니었다. 점끼리 연결상태 파악하기가 쉽질 않았다. 그래서 맵 에디터를 만들면서 그 위에 직접 선분을 그을 수 있게 만들어 버리도록 생각을 해보니 그렇게 하면 될 듯 싶어서 생각은 그 쯤에서 마쳤다.
[C++] C2440 : const char[]에서 char*로 변환할 수 없습니다 에러에 관하여
By 프로그래밍 일지 | 2019년 1월 17일 |
[그림 1] C2440 ERROR 문자열 리터럴을 사용하기 위해서 char* 형태의 변수를 선언했을 때 [그림 1]과 같은 에러가 발생한다.에러의 내용은 "aa"라는 문자열은 const(상수)값인데 변수에 그 값을 집어넣으려고 하니 에러가 발생한다는 것이다. 도대체 이런 에러가 왜 발생하는 걸까? 이런 에러가 발생하는 이유를 MSDN에서는 다음과 같이 설명하고 있다. C2440 can be caused if you attempt to initialize a non-const char* (or wchar_t*) by using a string literal in C++ code, when the compiler conformance option /Zc:strictStrings is set.
[C++] std::map을 사용해보자!
By Lusain's Blog ─ Programing &amp; Novel Review + | 2017년 3월 1일 |
std::map은 키와 값이 있는 자료구조인데, 특이한 점은 키들 간 크기 비교가 가능하면(연산자 오버로딩 등의 방법으로) 어떤 구조체라도 상관이 없다는 점이다. 예를 들어 std::string이라던가, 값이 0부터 늘어나지 않거나 순서대로 증가하지 않는 enum 등등. 그리고 크기 비교가 가능하기 때문에 입력 시 자동적으로 정렬이 된다. 이 자료구조는 굉장히 쓰기 쉽게 [] 연산자를 지원하는데, [] 안에키를 입력하면 값에 접근할 수 있다. 심지어, 해당 키에 대한 값이 초기화되어 있지 않아도 접근이 가능하다. 말이 살짝 어려울 수 있으니 예제를 보자. #include <map> … class T { }; std::map<int, T*> m;m[10] = new T{};