Frage zum Code einer (Template)Klasse. MSDN/BaseWindow



  • Hallo,

    gleich vorweg möchte ich mich entschuldigen, das der Frage-Titel nicht so aussagekräftig ist.
    Ich weiss nur nicht, wie ich es genau nennen soll.
    Das Beispiel hat bischen mit der WinAPI zu tun, jedoch bezieht sich
    meine Frage auf C++, weshalb ich sie hier poste.

    Hier geht es zu Code, auf welchen sich meine Frage bezieht: https://msdn.microsoft.com/en-us/library/ff381400%28v=vs.85%29.aspx#basewindow
    Es geht Konkret um diesen Teil (mittig auf der Seite):

    template <class DERIVED_TYPE> 
    class BaseWindow
    {
    public:
        static LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
        {
            DERIVED_TYPE *pThis = NULL;
    
            if (uMsg == WM_NCCREATE)
            {
                CREATESTRUCT* pCreate = (CREATESTRUCT*)lParam;
                pThis = (DERIVED_TYPE*)pCreate->lpCreateParams;
                SetWindowLongPtr(hwnd, GWLP_USERDATA, (LONG_PTR)pThis);
    
                pThis->m_hwnd = hwnd;
            }
            else
            {
                pThis = (DERIVED_TYPE*)GetWindowLongPtr(hwnd, GWLP_USERDATA);
            }
            if (pThis)
            {
                return pThis->HandleMessage(uMsg, wParam, lParam);
            }
            else
            {
                return DefWindowProc(hwnd, uMsg, wParam, lParam);
            }
        }
    
        BaseWindow() : m_hwnd(NULL) { }
    

    Es handelt sich um

    BaseWindow() : m_hwnd(NULL) { }
    

    Falls ich das richtig verstanden habe, so wird hier die MV m_hwnd einfach auf NULL gesetzt. Dann frage ich mich jedoch, wieso dort BaseWindow() und nicht BaseWindow steht.
    Ich vermute, weil es ja ein Template ist, und diese NULL-Zuweisung für alle "Typen" gelten soll und von daher die Klammer leer ist.
    Würde mann dies jedoch nicht so schreiben BaseWindow<> ? Ich würde mich freuen, wenn mir da jemand sagen kann,
    ob ich schon richtig liege, oder einfach einen Denkfehler habe.

    Danke schonmal 👍



  • Hä? Das ist ein normaler Konstruktur, die Syntax ist schon richtig. Irgendwie versteh ich überhaupt nicht, worauf du hinauswillst.



  • Verdammt. Ich blinder Vollidiot. Denke die ganze zeit nach, was das sein kann. Hab voll übersehen, das die geschweifte Klammer über

    BaseWindow() : m_hwnd(NULL) { }
    

    NICHT die abschließende Klammer der Klasse ist. Tut mir leid, das ich mich so dämlich angestellt habe. 🙄 👎


Anmelden zum Antworten