Template Funktionsparamter



  • Hallo!
    Vielleicht wurde die Frage schon irgendwo gestellt:
    Der MinGW kann folgende Zeile mit einem Funktionsprototypen fehlerfrei kompilieren:

    template <typename _Ty>
    bool UDPSend(const _Ty&, const string, const int);
    

    Der Visual C++ 2008 Compiler kann das nicht, es kommt:

    error C4430: Fehlender Typspezifizierer - int wird angenommen. Hinweis: "default-int" wird von C++ nicht unterstützt.
    

    Wieso kann ich nicht sowohl Templates mit nicht-Template-Parametern in einem Funktionsprototypen nutzen? Gibt es Alternativen?



  • template <typename T>
    bool UDPSend(const T&, const std::string&, int);
    

    sollte imho gehen

    btw: ist es ne unart, in prototypen keine namen anzugeben!
    und _X (unterstrich großbuchstabe) ist für Compiler reserviert... wieso nehmen alle möglichen Leute immer so ne hässlichen Bezeichner?

    bb



  • Es geht aber nicht. Probier es mal aus! Wenn ich nur den Template-Parameter behalte, klappt es, aber ich brauche auch string und int.

    > und _X (unterstrich großbuchstabe) ist für Compiler reserviert...

    Wie kommst du darauf? Es gibt reserved words. Die Standartbibliothek macht es auch. 😕



  • #include <string>
    
    template <typename T> 
    void bla(const T&, const std::string&, int)
    {}
    
    int main()
    {
    	bla(3, "asd", 5);
    }
    

    kompiliert mit welcher fehlermeldung nicht? Oo

    bb

    edit:
    "die standard-bibliothek macht es auch"
    und deren implementierung ist wohl nicht compiler-abhängig?
    es ist nun mal so, dass man _X nicht verwenden sollte - weil es durchaus legitim ist, dass ein compiler iwo ein makro auf diesen bezeichner gelegt hat...
    es ist reserved - punkt. kannst es aber gern auch weiterhin so machen...



  • Ad aCTa schrieb:

    Wie kommst du darauf? Es gibt reserved words. Die Standartbibliothek macht es auch. 😕

    Das ist nicht ein willkürlicher Einfall von unskilled, das steht so im C++-Standard.

    Abgesehen davon ist "die Standardbibliothek macht es, also darf ich es auch" kein Argument. Du darfst zum Beispiel auch nicht dein eigenes gleichnamiges assert -Makro definieren, wenn du konform bleiben willst.

    Und stell std:: vor string , damit dein Fehler verschwindet. Vergiss auch nicht, <string> einzubinden.



  • Ad aCTa schrieb:

    Wie kommst du darauf? Es gibt reserved words. Die Standartbibliothek macht es auch. 😕

    Nur, dass die Standardbibliothek in Zusammenarbeit mit den Compilerprogrammierern programmiert wird und das deswegen darf



  • Ad aCTa schrieb:

    > und _X (unterstrich großbuchstabe) ist für Compiler reserviert...

    Wie kommst du darauf? Es gibt reserved words. Die Standartbibliothek macht es auch. 😕

    Im C++ Standard steht sowas wie:

    "Names starting with an underscore are reserved for special facilities in the implementation and the runtime environment, so such names should not be used in application programs."



  • EDIT:
    Manchmal sollte man ganz lesen 🙂


Anmelden zum Antworten