0
自分のクラスの移動代入演算子を実装したいと思います。これはすべての動的バインディングも移動します。私はwxEvtHandlerから継承しようとするまで、うまく動作します。私はwxEvtHandlerからの継承でうまくいくと思っています。助けてください。動的バインディングを持つクラスの代入演算子を移動する
UIクラス:
class FrameUi : public wxFrame
{
public:
FrameUi(wxWindow* parent)
: wxFrame(parent, wxID_ANY, wxEmptyString, wxDefaultPosition, wxDefaultSize)
{
m_panel = new wxPanel(this);
wxBoxSizer* mainS = new wxBoxSizer(wxVERTICAL);
m_button = new wxButton(m_panel, wxID_ANY);
mainS->Add(m_button, 0, wxALL);
m_panel->SetSizer(mainS);
wxBoxSizer* m_panelSizer = new wxBoxSizer(wxVERTICAL);
m_panelSizer->Add(m_panel, 1, wxEXPAND, 5);
SetSizer(m_panelSizer);
}
wxPanel* m_panel;
wxButton* m_button;
};
コントローラクラス:
class Frame
: public wxEvtHandler // Without inheriting from it, binding work on new object
{
public:
Frame()
: m_ui(0)
{ }
Frame(wxWindow* parent)
: m_ui(new FrameUi(parent))
{
m_ui->m_panel->Bind(wxEVT_LEFT_DOWN, &Frame::onLeftDown, this);
m_ui->m_button->Bind(wxEVT_BUTTON, &Frame::onButton, this);
}
Frame(const Frame&) = delete;
Frame& operator=(const Frame&) = delete;
Frame& operator=(Frame&& rhs)
{
if (&rhs != this)
{
m_ui = rhs.m_ui;
rhs.m_ui = nullptr;
}
return *this;
}
void onLeftDown(wxMouseEvent& event) { wxLogDebug("Left Down"); }
void onButton(wxCommandEvent&) { wxLogDebug("Pressed"); }
FrameUi* m_ui;
};
メインウィンドウクラス:
class MainWnd : public wxFrame
{
public:
MainWnd()
: wxFrame(NULL, wxID_ANY, wxEmptyString)
{
wxBoxSizer* s = new wxBoxSizer(wxVERTICAL);
SetSizer(s);
}
Frame frame;
};
アプリケーション入口点:
class WxguiApp
: public wxApp
{
public:
bool OnInit() override
{
MainWnd* mainWnd = new MainWnd();
mainWnd->Show();
SetTopWindow(mainWnd);
mainWnd->frame = Frame(mainWnd); // If comment inheritance from wxEvtHandler, binding will work well
mainWnd->frame.m_ui->Show();
return true;
}
};
IMPLEMENT_APP(WxguiApp);
'wxEvtHandler'は移動可能ですか? – NathanOliver
[MCVE](http://stackoverflow.com/help/mcve)を投稿してください。コアクラスなしでどうやって手助けするのですか? – m8mble
私は分かりませんが、それを継承するときにm_uiのものへの他のバインディングを壊しているようです。何もそれに縛られていませんでした。 –