Cast Wrapper-Class到原始类

时间:2014-03-25 18:15:20

标签: casting objective-c++ pimpl-idiom

我使用pimpl使用Wrapper-Class,因此我可以在使用C ++时使用Objective-C方法。

现在我的ViewWrapper.hpp中有这个:

class ViewWrapper
{
    public:
        void addSubview(ViewWrapper *view); //method exists in original View.h (Objective-C)
        ViewWrapper (void);
        ~ViewWrapper (void);
    private:
        struct Impl;
        Impl* impl;
};

在我的ViewWrapper.mm中:

//ViewWrapper.mm

#import "ViewWrapper.hpp"
#import "View.h" // original Objective-C header

struct ViewWrapper::Impl
{
    View* obj;
};

ViewWrapper::ViewWrapper() : impl(new Impl)
{
    impl->obj = [[View alloc] init];
}

void ViewWrapper::addSubview(ViewWrapper *view)
{
    [impl->obj addSubview:(View *) view]; // <- here is the error
}

现在在我的main.cpp中,我这样使用它:

// main.cpp

ViewWrapper *wrapper1 = new ViewWrapper();
ViewWrapper *wrapper2 = new ViewWrapper();
wrapper1->addSubview(wrapper2);

现在当我尝试编译它时,我收到错误消息

  

&#34;线程1:EXC_BAD_ACCESS(代码= 2,地址= 0x105)&#34;在我的ViewWrapper.mm

我想我的问题是,这不是将ViewWrapper强制转换为View的正确方法。任何其他方法都可以正常工作(例如,const char *到NSString,依此类推......)

任何人都可以帮助我吗?如果您需要更多信息,我会尝试尽可能地添加它。

1 个答案:

答案 0 :(得分:0)

我自己解决了。如果有人遇到同样的问题,我改变了我的addSubview方法:

[impl->obj addSubview:(UIView *) view->impl->obj];