음.. 우리나라 말로 번역하면, "템플릿 친구 만들기"로 표현되는데, 무슨 말인고 하면, "클래스에 friend 선언시 클래스 템플릿 또는 함수 템플릿를 firned 하기" 를 말한다. 예로 쓸 함수는, boost의 checked_delete 함수 템플릿을 사용해 보기로 한다. 이 함수의 헤더 파일은 boost/checked_delete.hpp 이다. 전문은 아래 소개 한다. #ifndef BOOST_CHECKED_DELETE_HPP_INCLUDED #define BOOST_CHECKED_DELETE_HPP_INCLUDED // MS compatible compilers support #pragma once #if defined(_MSC_VER) && (_MSC_VER >= 1020) # pragma o..
전체 글 검색 결과
이번 항목은 나에게 큰 충격을 주었다. "이렇게 되는 구나." 싶었기 대문이다. 특수화를 하지 말아야 하는 이유가 절대적인것은 아니지만, 조심해야 하는 이유로써는 충분하다. 소크라테스의 교육법대로, 질문을 통해서 진행한다. 1. C++에 존재하는 템플릿의 두 가지 종류는 무엇이며, 각각 어떻게 특수화하는가? 알다시피 템플릿의 두 가지 종류는 "클래스 템플릿" 과 "함수 템플릿" 두 가지가 있다. 이 두가는 링크를 통해서 정리한다. IT 전뇌실/C++ Template 첫번째 질문은 이 링크로 대체 할 수 있다. 이제 본론으로 넘어가서 두번째 질문을 던져보자. 2. 다음 코드의 마지막 줄에서 호출되는 것은 어떤 f일까? 그리고 왜 그것이 호출 될까? template void f( T ); template v..
일반성을 갖춘 코드를 짤 때, 주의 해야 할 것이 무엇인지 말하고자 하는 항목이다. 사실 나는 성능에 큰 영향을 미치지 않는다면,일반성을 갖추는게 더 효과적이라고 생각을 한다. 여러가지 이유가 있지만, 가장 큰 이유는 아마도, "다른 사람이 내 코드를 보았을 때, 무리가 없는게 제일 좋기 때문" 을 들 수가 있을 것이다. 허브 셔터는 이번 장에서, 이런 일반성을 갖추고자 할 때, 주의해야 하는것을 이 끌어 내기 위해서 다음과 같은 질문을 던졌다. 1. 다음 함수들에는 미묘한 일반성 함정이 존재한다. 그것이 무엇이며 가장 좋은 해결 방법은 무엇이가? template void destory( T* p ) { p->~T(); } template void destory( Fwditer first, Fwditer..
.. Tip 이라고 하기도 모하다.. 우선 벡터에 5개의 값을 넣고, 돌리면, 릴리즈에선 다음과 같이 나온다. 보이는가? MSVC2005 Release 모드에서 디버깅을 하면, .. 아무값도 확인 할 수가 없다. 또, 값을 확인 하려 할 때, 역시 그 값이 실존하는 값인지 보증할 수가 없다. 그러므로 Debug 모드에서 디버깅을 해야만 한다. 이것은 아주 자주하는 실수로 값이 이상하다 싶으면, 현재 모드가 무엇인지 살펴봐야 한다는 교훈을 갖어다 준다. 다음은 Debug 모드에서 디버깅을 했을 때, 나오는 화면이며, 같은 Break Point 이다. 보이는가? .. 잘 나온다. .. 음... 간략한 조사식은 보고싶은 변수에 SHIFT + F9 를 누르면 된다. 총평 이게 팁이라 볼수 있나? 부끄러운 팁이다..
link : http://www.cplusplus.com/reference/clibrary/cstdio/printf.html Print formatted data to stdout Writes to the standard output (stdout) a sequence of data formatted as the format argument specifies. After the format parameter, the function expects at least as many additional arguments as specified in format. Parameters formatString that contains the text to be written to stdout. It can optio..
#define define_msg 은 define_msg를 정의한다고 전처리기에게 알리는 것이다. #ifndef define_msg 은 전처리기에게 define_msg가 정의안되어 있다면, #endif 까지 "코드 인스턴스화" 하라는 뜻이다. #endif 는 #if??? 에서 여기까지 끝난 다는 뜻이다. #ifndef 와 #endif 는, 코드를 인스턴스화 할지 안할지를 결정하는데 많이 쓰이는데, 어제 이것 때문에 고생 꽤나 했었다. 다른곳에서 define 정의되어 있는지도 모르고, 다른 곳에서 버그를 고치려 했으니, "종로에서 뺨맞고 한강가서 화풀이 한다."를 한 꼴이다. 이 문제를 해결하기 위해서, 예전에 공부했다가, 어떤 사람이 했던 한가지 대안이 떠올랐다. 바로 파일 이름명을 이용하여, #defi..
최근댓글