C++ 템플릿 검색 결과
템플릿 특수화란? 템플릿 매개변수에 따라 컴파일러가 템플릿 코드 선택해 줄수 있게 해주는 기법을 말한다. 템플릿 특수화는 여러가지 용도로 사용 되는데, 포인터 타입이 들어오거나, 특정 타입을 받았을 경우, 특수화된 템플릿이 인스턴스화 되게 할 수 있다. 굳이 비교를 하자면, C 언어의 if 문 같은 녀석이다. (메타 프로그래밍에선 이 특수화를 감칠맛 나게 응용한다.) 템플릿 특수화를 어떻게 만드나? 예제코드를 보자. #include // 일반 클래스 템플릿 template class ikpil { public: ikpil() { using namespace std; cout
C++ 에서 함수의 기본 매개변수를 정하는 방법이 있다. 그 방법은 대부분 알고 있으므로 패스하고, C++ 템플릿 매개변수도 "기본 템플릿 매개변수"가 있다는 것만 알고 잇으면 된다. 이야기 진행 상 밑에서 설명 한다. C++ 템플릿은 함수 템플릿과 클래스 템플릿, 이 두개에서 템플릿을 구사 할 수 있는데, 기본 템플릿 매개변수는 클래스 템플릿에서만 적용이 된다. 어떻게 기본 템플릿 매개변수를 사용 할 수 잇는가? 예제코드 template class DefaultTemplateParameter { }; 그 사용 방법은 C++ 함수와 똑같다. 이렇게 만든 클래스 템플릿의 경우, C++ 함수 기본 매개변수와 같이, 생략되어서 사용 될 경우, 기본적으로 정해준 매개변수에 의하여 초기화가 이루어 진다. 총평 따..
C++ 템플릿은 상당히 자유롭게 코딩을 할 수 있는 "즐거움" 선사해 준다. 이런 "즐거움" 자신이 생각한게 무척 잘 돌아간는 느낌에서 온다. 그러면 이제 무척 잘 돌아간다는 "사례"를 한가지 들어 보자. 만약 자신이 문자열을 정렬하는 로직을 만들어야 한다고 가정하자. 문자열 정렬을 위해서, ① 문자열이 있어야 하고, ② 문자열이 저장된 원소의 타입을 알아야 되고, ③ 정렬 방법에 대해서 알아야 한다. 여기서 큰 문제가 하나 있다. 각 나라마다 문자열을 정렬하는 기준이 다르고, 특정 나라는 문자열을 정렬하는데, 많은 방법 들이 있기 때문이다. 이 중, ①, ② 은 원래 생각할 수 있을 법한 것이기에 크게 생각을 요구(.. 유니코드 쓰지 뭐. 아니면 UTF-8 이나..)하지 않고, ③ 의 경우.. 정렬 방..
시작하기 앞서 한가지 중요한 사실을 짚어 본다면 " 함수 템플릿에서 템플릿 매개변수는 함수의 인자에 의해서 추론 된다" 를 알고 있어야 할것 같다. 이 추론 될 수 있음으로 추론 되는 방법을 알아야 되기 때문이다. 이 추론 되는 방법은 함수 오버로딩과 깊은 연관이 있으며, 어떤 함수를 호출할지도 판별하게 되기 때문이다. 우선 컴파일러는 함수 호출 문을 보고, 템플릿 매개변수와 매칭을 시키는데, 이때 함수의 인자가 함수의 템플릿 매개변수를 모두 사용 할 때, 인자를 템플릿 매개변수로써 판별 할 수 있다. 만약 템플릿 매개변수를 함수의 인자로 모두 사용 하지 않는 다면, 명시적으로 에 넣어 주어야만 한다. 이 함수 템플릿과 클래스 템플릿의 큰 차이는 바로 이 추론에 있다. 함수 템플릿은 인자로 추론하여, 템..
템플릿 정의하기에서 정의하는 방법을 정리했다. 정리 되는 도중에 한가지 의문점이 생기는데, 그 의문점은 "도데체 언제 템플릿들이 코드화가 이루어 지는 것일까?" 이다. 당연한 이야기 겠지만, 컴파일러에 의해서 링크가 되기 전에 이루어 질 것이지만, 정확한 시점을 모르면 약간 어리 둥절할 때가 있기 떄문이다. 이 어리둥절함은 컴파일 타임이라는게 전처리기 타임이라는 것도 있고 이진코드 생성 타임도 있고, 문법 검사 타임도 있고, .. 여러 타임이 나누어져 있기 때문에, 템플릿 인스턴스화의 시점에 따라서 템플릿 코드가 달라 질 수 있어, 어리 둥절 하게 된다. 그렇다면, "템플릿 인스턴스화" 란 무엇인가? 템플릿 매개변수에 인자를 넘겨서 클래스 선언을 만드는 과정을 "템플릿 인스턴스화" 라고 한다. 이런 인스..
최근댓글