제일 싫어하는 try 와 catch 이다. 사용해 본적이 별로 없어서인지 친근하지 않을 뿐더로, 알아야 할 것이 산떠미 처럼 쌓여(.. C++ 이 원래 그렇지만 )있으니, 손 댈 때도 조심해야 할 것이다. 1 ) try 블록 이란? 코드를 보자. #include #include int main( void ) { bool some_condition = true; bool some_other_condition = true; try { if( some_condition ) { throw std::string( "this is a string" ); } else if( some_other_condition ) { throw 42; } } catch( const std::string& rError ) { // s..
c++ 검색 결과
이번 항목은 항목 9에서 더 생각해 봐야 할 것 들을 이번 항목에서 다룬다. 이번 항목에선 "export의 한계"가 있음에도 불과하고, 왜 표준에 들어갔으며, 프로그래머에게 어떤 영향을 미치는지 알아 본다. 1 ) export가 현재 현태로 C++ 표준에 도입된 것은 언제이며, 처음으로 구현된 적은 언제인가? 템플릿에 관한 역사 1988년 10월, 비야네 스트롭스트룹이 초기 C++ 템플릿 설계를 발표 1990년, 마거릿 엘리스(Margaret Ellis)와 비야네 스트롭스트룹은 "The Annotated C++ Reference Manual"을 출판하였고, 거기에 템플릿의 전체 명세와 설명을 포함시켰다. 1994년, Stepanov가 STL을 위원회에 제시했다. 1995년, STL은 표준안으로 채용 되었..
"export의 한계"라 표현한 것 보면, 무엇인가 기대한것에 미치지 못한다는 의미를 갖고 있다고 추측이 된다. 그런데 이 export 는 무슨 export 일까? 바로 템플릿의 export 이다. .. export 는 템플릿 말고, 몇개 더 있는거 같던데(라이브러리 만들때, 아니였나 만들어 본적이 없어서..), 이번 항목은 "템플릿의 export 함계"라고 말해도 좋을 듯 싶다. 질문으로 논쟁을 유도해 보자. 1 ) 템플릿의 "포함 모형"이 뜻하는 바는 무엇인가? ... 부스트의 hpp 같은 녀석들이랄까? 헤더 파일에 정의도 다 포함된 녀석들을 뜻한다. 대표적인 예로 stl 을 들 수 있겠다. 2 ) 템플릿의 "분리 모형"이 뜻하는 바는 무엇인가? .h 와 .cpp 로 헤더파일과 정의 부분을 나누어서,..
음.. 우리나라 말로 번역하면, "템플릿 친구 만들기"로 표현되는데, 무슨 말인고 하면, "클래스에 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..
최근댓글