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 타입을 비교 하는 방법은, 템플릿 부분 특수화 밖에 없다. 여기서 예외가 하나 발..
만약 typelist에 자료형을 추가할 수 있다면 얼마나 좋을까? 왜 좋은지 모르겠다구? 음.. 내가 설명을 정리를 안한게 있나보다. 처음부터 다시 간다면 6개의 타입을 갖는 typelist를 정의 하기 위해선 매크로를 돌려서 typedef TYPELIST_6(float, int, double, unsigned long, long long, float) typelist6; 로 만들어야 할 것이다. 만들고 사용하다 보니, 동일한 타입에 int만을 추가하고 싶다. 자.. 그러면 어떻게 할까? typedef TYPELIST_7(float, int, double, unsigned long, long long, float, int) typelist7; 자 어떤가? .. 아 귀찮아서 못써먹겠다고? 그렇다. 그래서 ..
이번 테크닉은 Typelist에 들어 있는 찾고자하는 자료타입이 몇번 인덱스에 존재하는지 찾기 위한 테크닉이다. 만약 원하는 결과가 있다면, 그 인덱스를, 원하는 결과가 없다면 -1을 리턴하면 좋을듯 싶다. 가지고 있는 정보를 토대로 로직을 구상해 보면 다음과 같다. 1. 탐색하는 흐름이 NullType까지 왔다면, 찾고자 하는 타입이 없는 것이므로, -1을 리턴한다. 2. 탐색하는 흐름이 원하는 타입을 typelist::Head 에서 찾았다면 0을 리턴한다. 이 탐색하는 흐름은 뒤에서 이야기 하고, 여기서 나열한 두개의 조건에 대해서만 생각해 보자. 찾지 못했을 때, 어떤 값을 리턴해야 하지? 나는 처음에 이 생각을 했었다. 검색하지 못했을 때, 아무값으로 해도 되지 않을까? 라고 자문해 보았을 때, ..
최근댓글