#pragma once #include class wxControlObject : public wxObject { public: wxControlObject(wxControl* control) : m_control(control) {} template T* GetControl() const { static_assert(std::is_base_of::value, "T must inherit from wxControl"); return dynamic_cast(m_control); } wxControl* GetControl() const { return m_control; } private: wxControl* m_control; }; class wxControlObjects : public wxObject { public: wxControlObjects(std::vector controls) : m_controls(std::move(controls)) {} template T* GetControl(int index) const { static_assert(std::is_base_of::value, "T must inherit from wxControl"); if (index < 0 || index >= m_controls.size()) return nullptr; return dynamic_cast(m_controls[index]); } const std::vector& GetControls() const { return m_controls; } private: std::vector m_controls; };