본문 바로가기

이론/[책]Effective C++4

[항목55]Boo자유친! 부스트를 늘 여러분 가까이에 Boost 라이브러리는 현장에 당장 투입 될 수 있을 정도로 품질도 우수하고, 오픈소스이며 대부분의 플랫폼과 컴파일러에서 돌아갑니다.Boost는 C++ 표준화 위원회와 밀접한 관계를 유지하고 있으며 표준 C++에 추가될 수 있는 기능들의 시험 장소로 사용되고 있습니다.Boost 라이브러리는 크기와 범위가 아주 제각각입니다. (작은 녀석들은 코드 몇줄이지만 무지막지하게 큰 라이브러리도 있다.)Boost 라이브러리는 크게 십수 개의 범주로 나뉘어 있습니다. 1. 문자열 및 텍스트 처리 boost::regex -> std::regex C++ 11에서 표준으로 추가 2. 컨테이너 - STL 양식의 인터페이스를 제공하는 고정 크기 배열 tr1::array -> std::array C++ 11에서 표준으로 추가 -.. 2018. 1. 2.
[항목45]호환되는 모든 타입을 받아들이는 데는 멤버 함수 템플릿이 직방! 스마트 포인터에서 포인터와 같은 암시적 형 변환을 지원하게 해주기 위해 코드를 작성해보면 그 작업이 엄청 까다롭다는 것을 깨달을 수 있다.templateclass SmartPtr{public: explicit SmartPtr(T* realPtr);}; class Top{}; class Middle : public Top {}; class Bottom : public Middle{}; SmartPtr pt1 = SmartPtr(new Middle);SmartPtr pt1 = SmartPtr(new Bottom);포인터의 경우 암시적 변환이 가능하지만 SmartPtr과 SmartPtr은 컴파일러가 봤을 때 완전 별개의 클래스입니다. 따라서 직접 코드를 작성해줘야 합니다. templateclass SmartP.. 2017. 12. 28.
[항목44]매개변수에 독립적인 코드는 템플릿으로부터 분리시키자 템플릿을 사용하면 생김새나 하는 일이 비슷한 클래스의 코드를 일일이 작성해주지 않아도 된다.* 몰랐던 내용인데 클래스 템플릿의 멤버 함수는 실제로 사용될 때에만 암시적으로 인스턴스화 된다고 한다.(나는 클래스가 인스턴스화될 때 들고있는 모든 멤버함수들도 인스턴스화 되는 줄 알고 있었다...) 하지만 이 템플릿도 아무 생각 없이 사용하다가는 템플릿의 적 코드 비대화(code bloat)를 초래 할 수 있다.고정 크기의 정방행렬을 나타내는 클래스 템플릿으로 위 설명의 예를 보여드리겠습니다. templateclass SquareMatrix {public: void invert(); //주어진 행렬을 역행렬로 만드는 함수} 위으 SquareMatrix 템플릿 클래스는 T라는 타입 매개변수와 size_t라는 비타.. 2017. 12. 26.
[항목43]템플릿으로 만들어진 기본 클래스 안의 이름에 접근하는 방법을 알아 두자 template class MsgSender{public: void sendClear(const MsgInfo& info) { 동작... }} templateclass LoggingMsgSender : public MsgSender{public: void sendClearMsg(const MsgInfo& info) { sendClear(info); }} 위의 코드는 컴파일되지 않는다.그 이유는 LoggingMsgSender 클래스가 컴파일될 때 Base클래스인 MsgSender의 템플릿 매개변수가 어떤 것인지 모르기 때문에(LoggingMsgSender가 인스턴스로 만들어 질 때까지 무엇인지 알 수 없다) MsgSender 클래스가 어떤 형태인지 알 수 없어서 sendClear 함수가 들어 있는지 없는지.. 2017. 12. 25.