Purpose-built post 이 포스트는 "Modern C++ Chapter 3.13 Typelist를 통한 클래스 생성"을 보고, 정리한 것이며, 내가 이해한 것이 틀렸다면, 피드백을 받기 위해서, 나 스스로가 공부하기 위해서, 이 챕터를 공부하는 사람들에게 필요할 수 있기에, 만들었다. - 익필 Content 3.12만을 통해서는 아무것도 할 수 없다. 왜냐하면, 타입리스트의 타입 정보만 있지, 데이터를 저장하는 공간이 없기 때문이다. 그래서 이제부터 실제 데이터를 담을 수 있는 공간을 만들어야 한다. (나는 이것을 다른 방법으로 구현했으나, 이 책의 구현이 더 깔끔하다.) 이제부터 나오는 정리는 다음 사항을 사용 할 수 있는 직관력을 필요로 한다. 템플릿 템플릿 파라미터 혹은 템플릿 템플릿 인..
책 정리/Modern C++ Design 검색 결과
Purpose-built post 1부를 끝내기 위해서 만들었다. Content 1부에서 만들어진 DerivedToFront 함수(함수라 칭하는게 옳다.)는 최대 상속 클래스를 찾았다. 라는 전제에서 만들어진 함수이다. 그러므로, 이제 "어떻게 최대 상속 클래스를 찾을 수 있을까?" 에 대해서 정리해야만 한다. 1. 어떻게 최대 상속 클래스를 찾을 수 있을까? 타입리스트 중에 최대 상속 클래스를 찾으려면, 타입리스트의 모든 요소를 비교 해야 한다. "모든 요소를 한번 훑기 위해선 타입리스트의 마지막 요소까지 "흐름"을 내려가게 한 뒤, 처음으로 나올때까지 비교 하는 방법" 밖에 없다. 비교라는 것은 두개를 비교 한다는 것이다. 동시에 3개를 비교하는 방법은 존재하지 않는다. 이는 실 생활에서도 마찬가지다..
Purpose-built post 이 포스트는 "Modern C++ Chapter 3-12 부분적으로 정렬된 Tytpelist"를 보고, 내가 이해한 것이 틀렸다면, 피드백을 받기 위해서 또는 나 스스로가 공부하기 위해서 또는 이 챕터를 공부하는 사람이 조금이나마 도움이 되기 위해서 만들었다. - 익필 Content 2009년 9월 4일날 3-11장을 본 후 3-12장을 보았지만, 도무지 이해가 되지 않았기 때문이다. 그래서 나는 이 장에서 멈쳤었다. 그러다가 이 3장에 트랙벡이 날라 온 것을 보고, 무기한 연장할 순 없어, 다시 책을 펴본다. 이 부분을 보면서 느낀 점은 "도대체 이것을 왜 해야지? 저자가 기술적 향연을 위하여, 하는건가?" 라고 생각했으나, 책에선 이러한 답변이 있었다. (이걸 보고 ..
Erase를 구현했을 때와 별 차이가 없다. 지우지 말고 자료형만 바꾸면 된다. 이건 바로 코딩으로 만들어도 될 듯하여, 제목만 보고 코딩을 했다. 다음 소스코드를 보자 template struct Replace; template struct Replace { typedef NullType Result; }; template struct Replace { typedef typelist Result; }; template struct Replace { typedef typelist Result; }; 생각 할 것도 없었기 때문에 굳이 정리는 하지 않고, ReplaceAll 을 한번 만들어 보기 바란다. ReplaceAll 소스코드 template struct ReplaceAll; template struc..
왜 중복 자료형 삭제가 필요한 걸까? 이것도 3.9, 3.8, 3.7과 마찬가지로 기존의 자료형에서 약간의 변형만 주어 새로운 자료형을 손쉽게 만들기 위함에 있다. 어떻게 하면 typelist의 중복 자료형을 삭제 할 수 있을까? 우선 생각해 볼 것이 있다. 1. 중복된 자료형인지 어떻게 판별 할 수 있을까? typelist에서 첫번째 타입은 온전히 확인 가능하다. 그러므로 이 첫번째 타입 즉, Head 타입이 Tail타입에 있는지 체크하면 될 것이다. 2. 중복되었다면 어떻게 지울 수 있을까? 3.9에서 특정 타입을 지우는 방법을 배웠다. Tail 에서 Head를 지우고 이 결과 타입을 다시 중복제거 알고리즘을 돌리면 될 것이다. 3. 중복되지 않았을 경우에는 어떻게 처리 할 수 있을까? Erase함수..
어떻게 하면 특정 자료형을 지울 수 있을까? 가장 작은 알고리즘을 생각한다면, 다음고 같을 것이다. 1. 지울 자료형이 있는지 찾는다. 2. 있다면, 지운다. 3. 없다면, 그대로 둔다. 여기서 "1. 지울 자료형이 있는지 찾는다"에서 다음 질문이 이어 질 수 있다. 어떻게 찾을 수 있는가? 찾는 방법은 찾고자 하는 타입과 비교 대상이 같은지 비교 하는 것이다. 다시 다음 질문으로 이어 질 수 있겠다. 비교 대상은 무엇이며, 어떻게 비교 할 수 있는가? 비교 대상은 typelist 구조상 첫번째 Head 타입일 수밖에 없다. Tail 타입은 typelist이거나 NullType 인데, 이것들은 비교 할 수가 없다. Head 타입을 비교 하는 방법은, 템플릿 부분 특수화 밖에 없다. 여기서 예외가 하나 발..
최근댓글