문제

Pimpl 의 근원의 보일러에 많은 C++코드입니다.그와 같은 종류의 것 조합의 매크로,템플릿 및 아마 약간의 외부 도구의 도움을 해결할 수 있지만,나는 무엇인지 가장 쉬운 방법이 될 것이다. 본 템플릿 는 도움말의 일부를 드는지 많은-당신은 여전히 필요 결국 쓰 전달 기능에 대한 모든 방법의 클래스하려는 랩이 포함되어 있습니다.이 있는 쉬운 방법이 있을까?

내가 상상하는 데 사용되는 도구의 한 부분으로 만드는 과정이다.당신이 당신의 대중에 헤더를 수 pimpl 클래스고,그래서 당신이 제공하는 일부 입력 파일,말 pimpl.에서,나열하는 클래스(을 구현 un-pimpl 것)당신이보고 싶은 포장면,그 파일에 검사를 하는 pimpl 클래스를 생성하고 그들의 헤더(원본 클래스의 헤더)은 설치하는 동안'만을 설치'.문제 보이지 않는데 방법이 없이 만발한 C++파서도 컴파일러 공급업체할 수 없습니다.어쩌면 클래스를 작성할 수 있습니에 어떻게든지는 작업의 외부 도구지만,나는 나가지 못 모든 종류의 모퉁이의 경우(예:템플릿 클래스고/또는 템플릿 구성원 기능).

어떤 아이디어가?다른 사람이 올 솔루션으로 이 문제에 대한 이미?

도움이 되었습니까?

해결책

없음 없는 쉽게 대답합니다.:-(나는 생각으로는 거의 모든 OO 전문가 말하는"아보세요성에 상속을 통해"가 될 것입니다 언어로 지원한 소재는 많은 보다 쉽게 상속입니다.

다른 팁

내가 이것을 말하고 있지 않다는 것은 좋은(뭔가 달려들 마음).
하지만 당신은 실험으로 과부하자->

#include <memory>
#include <iostream>

class X
{
    public:
    void plop()
    {
        std::cout << "Plop\n";
    }
};

class PimplX
{
    public:
        PimplX()
        {
            pimpl.reset(new X);
        }
        X* operator->()
        {
            return pimpl.get();
        }
    private:
        PimplX(PimplX const&);
        PimplX& operator=(PimplX const&);
        std::auto_ptr<X>    pimpl;
};   


int main()
{    
    PimplX      x;

    x->plop();
}

하나의 옵션을 사용하여 인터페이스 클래스는 대신:

class ClassA {
  virtual void foo() = 0;
  static ClassA *create();
};

// in ClassA.cpp

class ImplA : public ClassA {
/* ... */
};
ClassA *ClassA::create() {
  return new ImplA();
}

이것은 그러나 추가의 오버헤드에서 가져 vtable 함수 포인터입니다.

다른 것보다,나는 생각할 수 없다 이러한 도구입니다.당신이 말했듯이,구문 분석하는 C++이 아닌 사소한,및 다른 언어 밖에 있는 그것의 더 적은 문제가(예를 들어,C#또는 Java 늦은 bind 모든 것,그래서 당신은 변경할 수 있습니다 자신의 메모리 레이아웃을 나중에 문제없이).

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top