C++ 将pImpl指针转换回调用方类型

C++ 将pImpl指针转换回调用方类型,c++,pimpl-idiom,C++,Pimpl Idiom,我在我的程序中使用pimpl惯用语,我被困在一个地方。我的代码是 Class* Class::GetP() { return ClassImpl->GetP(); } 在我的ClassImpl->GetP中,我有 ClassImpl* ClassImpl::GetP() { return pClassImpl; } 如您所见,我需要将pImpl bact转换为调用方类型。 怎么走 我不想使用任何铸造 请给我一些建议,你不就这么做吗 Class * Class::GetP() {

我在我的程序中使用pimpl惯用语,我被困在一个地方。我的代码是

Class*
Class::GetP()
{
return ClassImpl->GetP();
}
在我的ClassImpl->GetP中,我有

ClassImpl*
ClassImpl::GetP()
{
return pClassImpl;
}
如您所见,我需要将pImpl bact转换为调用方类型。 怎么走

我不想使用任何铸造 请给我一些建议,你不就这么做吗

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

因为Class::GetP的调用方无论如何都不应该有指向内部的指针?但是,那是什么方法呢?它不会给调用者任何他们还没有的东西。

不想使用任何类型转换的原因是什么?GetP应该做什么?为什么需要它?GetP实际上返回了一个新的instancede,它是基于传递给GetP的参数生成的,我也可以使用reinepret cast,但它有一些开销。我认为解决方案很简单,我缺少了一些东西,实际上它更像GetPsome param,它返回一个新实例,这个实例是使用这个参数在impl类中构造的。如果它返回一个新实例,您应该以某种方式创建一个新类并返回它。所以您的实现函数将是Class*ClassImpl::GetP。。。{…}请注意,返回类型从ClassImpl*更改为Class*。因此,在我的pImpl类中创建调用方的实例可以吗?问题是GetP函数将包含大量ClassImpl->mem1、ClassImpl->mem2、ClassImpl->mem3,这非常混乱,因此需要在ClassImpl中创建GetP,但随后我们遇到了将pimpl转换回调用方类型的问题。有没有一种方法可以使用OP的方法使其工作?