functor als templateparameter



  • Hallo

    ich möchte einer template-Klasse ein functor als parameter übergeben.
    Das klappt nicht, mit der Meldung:

    error C2228: Links von ".wait" muss sich eine Klasse/Struktur/Union befinden.

    er erkennt also das objekt nicht. wenn ich als parameter eine freistehende
    funktion nehme, klappt aber alles normal.

    template <class func>
    class thread
    {
    public:
         thread(func);
         ~thread();
    private:
        func f;    
    };
    
    DWORD func()
    {
        MessageBoxA(0, 0, 0, 0);
        return 5;
    }
    int main()
    {
        struct str
        {
            DWORD operator () ()
            {
                MessageBoxA(0, 0, 0, 0);
                Sleep(1000);
                return 5;
            }
        };
        thread<DWORD (*)()> t1(func);
        thread<str> t2(str());           
        t1.wait();                       
        t2.wait();                        // <----- error
    
    }
    

    warum klappt das nicht mit der struct als parameter?



  • Hi,
    zwei Sachen sind fehlerhaft.

    1. Templateargumente dürfen keine lokalen Typen sein
    2. thread<str> t2(str()); wird als Funktionsdeklaration angesehen, abhilfe: thread<str> t2 = str();

    Edit: Deine Fehlermeldung bezieht sich auf Fehler Nr. 2, ersteres juckt ihn vermutlich nicht.



  • Danach wird er meckern, weil er wait() nicht kennt..


Anmelden zum Antworten