개요 저번장까지 이건 이렇고 저건 저렇다 라고 설명한 한 항목이였다. 이번 장은, 실질적으로 코드를 작성하는데 도움이 될 만한 몇가지 문법 들을 설명한다. 5.1 typename 5.2 this 5.3 멤버 템플릿 5.4 템플릿 템플릿 파라미터 5.5 0 초기화 5.6 함수 템플릿에서 문자열 리터럴을 인자로 사용 본문 5.1 typename이란 무엇이고, 어떤 용도인가? 지금까지 typename 은 템플릿 파라미터를 선언할 때 사용하는 키워드로 알고 있었지만, 여기에 한가지 의미가 더 있었다. 바로 "이것은 타입이다" 라고 알려 주는 의미이다. "이것은 타입이다"라는 의미가 왜 필요한가? 만약, 템플릿 파라미터가 클래스일 떄, 그 내부 타입이, "타입" 이라고 일러주지 않는 다면, 컴파일러가 에러를 벹어..
template 검색 결과
이번 항목은 항목 9에서 더 생각해 봐야 할 것 들을 이번 항목에서 다룬다. 이번 항목에선 "export의 한계"가 있음에도 불과하고, 왜 표준에 들어갔으며, 프로그래머에게 어떤 영향을 미치는지 알아 본다. 1 ) export가 현재 현태로 C++ 표준에 도입된 것은 언제이며, 처음으로 구현된 적은 언제인가? 템플릿에 관한 역사 1988년 10월, 비야네 스트롭스트룹이 초기 C++ 템플릿 설계를 발표 1990년, 마거릿 엘리스(Margaret Ellis)와 비야네 스트롭스트룹은 "The Annotated C++ Reference Manual"을 출판하였고, 거기에 템플릿의 전체 명세와 설명을 포함시켰다. 1994년, Stepanov가 STL을 위원회에 제시했다. 1995년, STL은 표준안으로 채용 되었..
템플릿 특수화란? 템플릿 매개변수에 따라 컴파일러가 템플릿 코드 선택해 줄수 있게 해주는 기법을 말한다. 템플릿 특수화는 여러가지 용도로 사용 되는데, 포인터 타입이 들어오거나, 특정 타입을 받았을 경우, 특수화된 템플릿이 인스턴스화 되게 할 수 있다. 굳이 비교를 하자면, C 언어의 if 문 같은 녀석이다. (메타 프로그래밍에선 이 특수화를 감칠맛 나게 응용한다.) 템플릿 특수화를 어떻게 만드나? 예제코드를 보자. #include // 일반 클래스 템플릿 template class ikpil { public: ikpil() { using namespace std; cout
C++ 에서 함수의 기본 매개변수를 정하는 방법이 있다. 그 방법은 대부분 알고 있으므로 패스하고, C++ 템플릿 매개변수도 "기본 템플릿 매개변수"가 있다는 것만 알고 잇으면 된다. 이야기 진행 상 밑에서 설명 한다. C++ 템플릿은 함수 템플릿과 클래스 템플릿, 이 두개에서 템플릿을 구사 할 수 있는데, 기본 템플릿 매개변수는 클래스 템플릿에서만 적용이 된다. 어떻게 기본 템플릿 매개변수를 사용 할 수 잇는가? 예제코드 template class DefaultTemplateParameter { }; 그 사용 방법은 C++ 함수와 똑같다. 이렇게 만든 클래스 템플릿의 경우, C++ 함수 기본 매개변수와 같이, 생략되어서 사용 될 경우, 기본적으로 정해준 매개변수에 의하여 초기화가 이루어 진다. 총평 따..
시작하기 앞서 한가지 중요한 사실을 짚어 본다면 " 함수 템플릿에서 템플릿 매개변수는 함수의 인자에 의해서 추론 된다" 를 알고 있어야 할것 같다. 이 추론 될 수 있음으로 추론 되는 방법을 알아야 되기 때문이다. 이 추론 되는 방법은 함수 오버로딩과 깊은 연관이 있으며, 어떤 함수를 호출할지도 판별하게 되기 때문이다. 우선 컴파일러는 함수 호출 문을 보고, 템플릿 매개변수와 매칭을 시키는데, 이때 함수의 인자가 함수의 템플릿 매개변수를 모두 사용 할 때, 인자를 템플릿 매개변수로써 판별 할 수 있다. 만약 템플릿 매개변수를 함수의 인자로 모두 사용 하지 않는 다면, 명시적으로 에 넣어 주어야만 한다. 이 함수 템플릿과 클래스 템플릿의 큰 차이는 바로 이 추론에 있다. 함수 템플릿은 인자로 추론하여, 템..
다음 문구는 비야네 스트롭 스트룹의 "The C++ Programming Language"의 13장, 템플릿의 처음 부분의 것을 인용한 것이다. " '개념(concept)'이라 하는 것은 그 자체의 독립성이 보장될 때는 독립적으로 표현되어야 마땅하며, 다른 개념과 결합시키려면 나음대로의 합당한 이유가 있어야 한다. 이것은 원칙이며, 이 것이 깨진다면, 이상한 개념들의 뭉치와 불필요한 의존구조만이 난무한 산업폐기물만이 하나 더 추가 될 뿐이다. " 또한 다음과 같이 마무리 한다. " 독립과 결합, 이 두 가지를 어떻게 선택하든지 둘 중 하나라도 지키지 않으면, 소프트웨어 구성에 필요한 구성요소를 선택하는 데 있어서 상당 부분의 융통성을 잃게 된다는 것을 확실하다. C++ 에는 이런 문제에 대한 해결책을 가..
최근댓글