【c++】 격진이 달린, Pimpl 관용구

1986 단어 C++cocos2d-x
전 블로그 【c++】격진이 달렸다, Pimpl 관용구 - 기술은 뜨겁게 치고!

오늘 C++용 API 디자인 읽고 격진이 달렸습니다. C++에서는 싫어도 private 변수나 함수도 .h 파일에 선언할 필요가 있다. 그렇게 생각했던 시기가 나에게도 있었습니다. 그렇지만, 다릅니다. 아무래도 Pimpl이라고 하는 관용구를 사용하면 cpp 파일에 숨길 수 있다고 합니다. Pimpl 도입 전의 코드 간단한 예로 보여 드리겠습니다. 여기에 Hoge라는 클래스가 있고, 인스턴스화되면 hoge라고 출력되는 클래스가 있습니다. Hoge.h // Hoge.h class Hoge { public: Hoge(); ~Hoge(); private: void printHoge(); }; Hoge.cpp #include "Hoge.h" Hoge::Hoge() { this->printHoge(); } Hoge::~Hoge() {} void Hoge::printHoge() { CCLOG("hoge"); } Pimpl 도입 후 코드 Hoge.h class Hoge { public: Hoge(); ~Hoge(); private: class Impl; std::unique_ptr<Impl> hoge; ...Ⅰ }; Hoge.cpp #include "Hoge.h" class Hoge::Impl { public: void printHoge(); }; ...Ⅱ Hoge::Hoge() : hoge(new Hoge::Impl()) ...Ⅲ { this->hoge->printHoge(); ...Ⅳ } Hoge::~Hoge() {} void Hoge::Impl::printHoge() ...V { CCLOG("hoge"); } 해설 도입 후의 코드를 봐 주세요. 주석하고 있는 곳이 주된 변경점입니다. 헤더 파일 ...Ⅰ 먼저 private에서 class 선언합니다. 이름은 뭐든지 좋다고 생각합니다. Hoge 클래스에서 private에 하고 싶은 동작을 기술하는 클래스명이 됩니다. 헤더 파일에서는 이 클래스의 인스턴스를 선언하는 곳까지를 기술. 구현 파일 ...Ⅱ - 새 클래스의 인터페이스를 선언합니다. public으로 하지 않으면 Hoge 클래스 내에서도 사용할 수 없기 때문에 주의. ...Ⅲ - 새 클래스를 생성자로 인스턴스화합니다. ...Ⅳ - 새 클래스의 인스턴스를 통해 메소드를 호출합니다. ...Ⅴ - 원래 Hoge 클래스에서 private에서 수행하고 싶었던 구현을 여기에 씁니다. 후기 이것은 상당한 충격이었어요. 저는 Objective-C에서 C++로 왔습니다. Objective-C에서는 헤더에 쓰지 않고 .m 파일에 직접 구현하면 private 함수가 되어 있었지만, C++에서는 헤더 파일에 선언만 써야 한다는 제약. 그렇지만 이 Pimpl로 그 스트레스로부터도 해방될 것 같습니다. 누군가의 도움이 되면. 이것은 서있을 것입니다! !

좋은 웹페이지 즐겨찾기