2012-02-16 3 views
0

내 프로그램에서 pimpl 관용구를 사용하고 있는데 한 곳에서 멈추었습니다. 내 코드에서pImpl 포인터를 다시 호출자 유형으로 변환

Class* 
Class::GetP() 
{ 
return ClassImpl->GetP(); 
} 

내 ClassImpl-> GETP() 당신이 내 발신자 유형 내 pImpl의 BACT를 변환해야 볼 수 있듯이 나는

ClassImpl* 
ClassImpl::GetP() 
{ 
return pClassImpl; 
} 

있습니다. 방법은 무엇입니까? 당신은 단순히

Class * 
Class::GetP() 
{ 
    return this; 
} 

을하지 않을까요 Class::GetP()의 발신자가 어쨌든 내부에 대한 포인터를하지 말았어야 때문에

+0

캐스팅을 사용하지 않는 이유는 무엇입니까? –

+0

'GetP'는 무엇을하고 있을까요? 왜 그것을 필요로합니까? – tzaman

+0

GetP는 실제로 getP에 전달 된 매개 변수를 기반으로 만들어진 일부 유형의 새로운 인스턴스를 반환합니다. 또한 reintepret cast를 사용할 수 있지만 약간의 오버 헤드가 있습니다. 나는 해결책이 간단하고 무언가를 놓치고 있다고 생각한다. 실제로 – Yogi

답변

0

를 조언을 주시기 바랍니다

나는 어떤 주조를 사용하려는 해달라고? (하지만 그 방법은 무엇인가? 호출자에게 아직 가지고 있지 않은 것을주지는 않습니다.)

+0

GetP (일부 매개 변수)와 비슷하다. 이 매개 변수를 사용하여 impl 클래스에서 생성 된 새 인스턴스를 반환한다. – Yogi

+0

새 인스턴스를 반환하는 경우, 어쨌든 새로운 수업을 시작했다. 그래서 당신의 구현 함수는'Class * ClassImpl :: GetP (...) {...}'(리턴 타입이'ClassImpl *'에서'Class *'로 바뀌 었음을 주목하십시오). –

+0

내 pImpl 클래스에서 호출자의 인스턴스를 만들면 괜찮습니까? – Yogi

관련 문제