Probs mit Templates



  • class MemManager
    {
    public:
    static MemManager& instance(void)
    {
    static MemManager M;
    return M;
    }

    template<class T>
    T* Allocate(void)
    {
    T* Type=new T;
    return Type;
    }
    }

    int main()
    {
    int *i=MemManager::instance().Allocate<int>();

    return 0;
    }

    Und Dann meldet mir der Compiler folgendes (ich verwende VC 6.0)

    error C2062: 'int'-Typ unerwartet

    Irgendwie kann ich den Fehler nicht nachvollziehen!



  • Semikolon nach der Klassendefinition vergessen?



  • das habe ich nur beim Copy&Pasten vergessen.



  • Ich will nicht vorschnell die Schuld auf den Compiler schieben, aber VC6 und Template-Memberfunktionen vertragen sich selten.



  • Hallo,
    der Code ist bis auf das fehlende Semikolon korrekt. Der VC 6 beherrscht allerdings die explizite Templateparameterangabe für Memberfunktionen nicht.

    Das:

    MemManager::instance().Allocate<int>();

    ist für den VC 6.0 deshalb keine gültige Syntax.

    Der Workaround besteht darin, dass du T über die Parameterliste automatisch herleitbar machst. Z.B. so:

    // ...
    template<class T> 
    T* Allocate(T* = 0) 
    { 
        T* Type = new T; 
        return Type; 
    } 
    // ...
    
    int *i=MemManager::instance().Allocate((int*)0);
    

    Hübscher finde ich sowas:

    template <class T> struct Type {};
    // ...
    template<class T> 
    T* Allocate(Type<T>) 
    { 
        T* Type = new T; 
        return Type; 
    } 
    // ...
    int *i=MemManager::instance().Allocate(Type<int>());
    


  • Danke für die Hilfe, werde es mal ausprobieren. Der Bug müsste doch aber Microsoft bekannt sein, oder? Warum fixen die das nicht mal!



  • Der Bug müsste doch aber Microsoft bekannt sein, oder?

    Ist er.

    Warum fixen die das nicht mal!

    Haben sie längst. Aber natürlich nicht für den VC 6. Das haben sie sich für den VC 7.1 aufgehoben (oder kann es der VC 7 bereits?).



  • HumeSikkins schrieb:

    Haben sie längst. Aber natürlich nicht für den VC 6. Das haben sie sich für den VC 7.1 aufgehoben (oder kann es der VC 7 bereits?).

    VC 7 kann es.

    Ich hasse die MS philosphie: keine neuen features per Service Pack *grml*



  • Es wird doch of von dem "Standard" gesprochen und dass er bei bestimmten Compilern verletzt wird. Was wird denn alles in diesem Standard festgelegt und wo kann man sich den ansehen?



  • Was wird denn alles in diesem Standard festgelegt

    Der ISO/IEC 14882 definiert die Programmiersprache C++.

    wo kann man sich den ansehen?

    Wenn man sich die Buchversion (175.00)kauft,aufPapier.WennmanzurpdfDateigreift(18) kauft, auf Papier. Wenn man zur pdf-Datei greift (18), auf dem Computer.

    Den Final-Draft gibt es allerdings auch online:
    http://www.kuzbass.ru/docs/isocpp/



  • Warum wird der Standard eigentlich nicht kostenlos angeboten?

    Ist das hier die Endversion oder noch ein Entwurf (draft)?
    xxx

    <Hume edit>Link entfernt</Hume edit>



  • Ist das hier die Endversion oder noch ein Entwurf (draft)?

    Das ist der komplette Standard 🙂
    Da der Link aber illegal ist, habe ich ihn entfernt.

    Warum wird der Standard eigentlich nicht kostenlos angeboten?

    Schätze mal, weil da eine riesen Menge arbeit und damit auch ein paar Kosten verbunden sind.


Anmelden zum Antworten