pImpl 클래스를 구현하는 작업 부하를 최소화하기 위해 어떤 종류의 트릭을 사용할 수 있습니까? 헤더 : class Foo {
struct Impl;
boost::scoped_ptr<Impl> self;
public:
Foo(int arg);
~Foo();
// Public member functions go
나는 이런 식으로 뭔가있는 pImpl 관용구에 대한 몇 가지 물건을 읽는 동안 : MyClass::MyClass() : pimpl_(new MyClassImp()) 먼저 : 그것은 무엇을 의미 하는가를? 둘째 : 구문은 무엇입니까? 그런 멍청한 녀석 인 것에 대해 유감스럽게 생각합니다.
배경 설명 : PIMPL Idiom (구현에 대한 포인터)가 공용 클래스 공용 클래스의 일부 라이브러리 밖에 볼 수없는 구조 또는 클래스를 감싸고있는 이행 은닉하는 기술이다. 이렇게하면 라이브러리 사용자의 내부 구현 세부 사항과 데이터가 숨겨집니다. 공용 클래스 메소드 구현이 라이브러리로 컴파일되고 사용자가 헤더 파일 만 갖기 때문에이 관용구를 구현할 때
내가 이해하는 것처럼, pimpl 관용구는 C++이 모든 개인 클래스 멤버를 헤더에 넣어야하기 때문에 존재합니다. 헤더가 공용 인터페이스 만 포함하는 경우 이론적으로 클래스 구현의 변경으로 인해 나머지 프로그램에 대한 재 컴파일이 필요하지 않습니다. 내가 알고 싶은 것은 왜 C++이 그러한 편리함을 허용하도록 설계되지 않았기 때문입니다. 클래스의 사적인 부
요소 배열을 보유하고있는 클래스가 있는데이 요소에 GetSize 멤버 함수를 제공하려고합니다. 그러나 그 함수에 어떤 리턴 타입을 주어야합니까? 저는 pimpl 관용구를 사용하고 있습니다. 따라서 헤더 파일에서 요소가 요소를 저장하는 데 어떤 구현을 사용할지 알 수 없습니다. 그래서 난 그냥 예를 들어, std::vector<T>::size_type 말할
Pimpl 's는 많은 C++ 코드에서 상용구의 근원입니다. 그들은 매크로, 템플릿 및 어쩌면 약간의 외부 도구 도움을 조합하여 해결할 수있는 것처럼 보이지만 가장 쉬운 방법은 무엇인지 확신 할 수 없습니다. I've seen templates 그 중 일부를 수행하는 데 도움이되지만 많이는하지 못합니다. 이제는 래핑하려는 클래스의 모든 메소드에 대해 전달
나는 다음과 같은 C++에 불투명 한 물체를 수행하는 방법을 알고 : 불투명 한 물체가 다른 네임 스페이스에서 기존 클래스 템플릿은 포함하지 않고있을 때 그것을 수행하는 방법 이제 // my_class.hpp
class opaque_object;
class my_class {
my_class();
~my_class();
opa