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::vorstring, 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