000
13.05.2007, 16:42 Uhr
xXx
Devil
|
Also ... hab mir nen kleines Message-System aufgebaut:
C++: |
class GUI_API Window { typedef bool (Window::* MessageHandler)(std::size_t*, void*);
protected: void register_message(const std::size_t&, MessageHandler);
public: bool handle_message(const std::size_t&, std::size_t* param1 = NULL, void* param2 = NULL);
protected: #pragma warning (disable: 4251) std::map<std::size_t, MessageHandler> m_messages; #pragma warning (default: 4251) };
|
...
C++: |
void Window::register_message(const std::size_t& message_id, MessageHandler message_handler) { m_messages.insert(std::make_pair(message_id, message_handler)); }
bool Window::handle_message(const std::size_t& message_id, std::size_t* message_param1, void* message_param2) { std::map<std::size_t, MessageHandler>::iterator it = m_messages.find(message_id); if (it == m_messages.end()) return true; return (this->*((*it).second))(message_param1, message_param2); }
|
... soweit verständlich? Ich hab ne Funktion register_message ... damit kann ich Funktionen einer von Window abgeleiteten Klasse in die map packen ... handle_message ruft die funktion dann auf ... wobei ich da jetzt den this-Zeiger genutzt hab. Ist das so io? Was passiert wenn die Memberfunc die in der map ist nicht eine memberfunc der selben klasse ist wie der this-Zeiger?
aja der aufruf von register_message sähe so aus:
C++: |
register_message(gui::GWM_ON_SEL_CHANGE, static_cast<MessageHandler>(&WindowBookSelection::on_sel_change));
|
...
Was würdet ihr an dem System verändern? Danke ... |