sin, cos, abs, min, max usw. keine Templates in C++???
-
finix schrieb:
sinu schrieb:
und was ist wenn man lieber ein template so aufruft: sin<datentyp>(wert)? kann man wohl knicken oder?
Warum sollte man gerade das wollen?
warum sollte man das nicht wollen? so sieht man direkt für welchen datentypen man es benutzt? daran schon gedacht?
wie schon gesagt: geht ums prinzip.
und die erschaffer von C++ haben sich sicherlich schon was dabei gedacht, dass man sowas machen kann, oder denkste das war nur ein unvermeidliches Nebenprodukt?
-
sinus user schrieb:
so sieht man direkt für welchen datentypen man es benutzt? daran schon gedacht?
Das ist schwachsinnig. Vor allem bist du dann auf den Datentyp festgelegt.
sinus user schrieb:
wie schon gesagt: geht ums prinzip.
Wie CStoll schon gesagt hat: das macht keinen Sinn, es gibt implizite Umwandlungen, und für selbstgestrickte numerische Typen brauchst du ohnehin entweder eine Typumwandlung oder eigene Überladung.
-
sinus user schrieb:
finix schrieb:
sinu schrieb:
und was ist wenn man lieber ein template so aufruft: sin<datentyp>(wert)? kann man wohl knicken oder?
Warum sollte man gerade das wollen?
warum sollte man das nicht wollen? so sieht man direkt für welchen datentypen man es benutzt? daran schon gedacht?
Ah, das ist prima. Also sowas wie sinus_float, sinus_double etc. Finde ich gut. Konsequenterweise sollte man vielleicht auch +_float, +_int, +_double und Konsorten einführen. Da sieht man immer gleich was los ist!

und die erschaffer von C++ haben sich sicherlich schon was dabei gedacht, dass man sowas machen kann, oder denkste das war nur ein unvermeidliches Nebenprodukt?
Ja, dieses Feature hat tatsächlich einen Sinn, nämlich den bei Mehrdeutigkeiten auflösen zu können. Der Fall liegt hier aber nicht vor. Tatsächlich liegt überhaupt kein template vor. Das Feature was hier greift heißt Überladung und es sorgt dafür, dass Du eben nur sin schreiben mußt und der Compiler automatisch die zu Deinem Typ passende Funktion aufruft. Insbesondere mußt Du nicht alles ändern, wenn Du Dein Programm mal von float auf double umstellst.
-
Jester schrieb:
Das Feature was hier greift heißt Überladung und es sorgt dafür, dass Du eben nur sin schreiben mußt und der Compiler automatisch die zu Deinem Typ passende Funktion aufruft.
und warum fehlt das dann für sin, cos, tan, log usw?
-
sinus user schrieb:
und warum fehlt das dann für sin, cos, tan, log usw?
Es fehlt nicht!
-
finix schrieb:
sinus user schrieb:
und warum fehlt das dann für sin, cos, tan, log usw?
Es fehlt nicht!
Wenn es nicht fehlt, warum bekomm ich dann kompilierfehler wenn ich sin<int>(4); schreibe wenn es nicht fehlt? Na?
Kann man das neuerdings einstellen ob man es bei templates schreiben kann oder nicht? Überleg doch mal.
-
Weil Du sin schreiben sollst und nicht sin<int> es gibt kein Funktionstemplate für sin weil es keinen Sinn machen würde.
-
Jester schrieb:
Weil Du sin schreiben sollst und nicht sin<int> es gibt kein Funktionstemplate für sin weil es keinen Sinn machen würde.
Der Sinn sei mal dahingestellt, aber es fehlt - Stimmts oder stimmts nicht, das es fehlt?
-
Nein, es fehlt nicht. Fehlen kann etwas nur, wenn es sinnvollerweise da wäre. Mir fehlt weder eine dritte Schulter noch eine zweite Nase -- und das obwohl ich beides nicht habe.
-
Natürlich fehlt das Funktionstemplate für Sinus! Nur weil Du sagst es würde keinen Sinn machen, heißt das nicht das es Falsch ist!
Und wenn schon etwas wie
float sin (float x);
deklariert wurde, kann es kein Funktionstemplate sein, also fehlt für sin ein Funktionstemplate.
-
Welchen Vorteil hätte das template denn gegenüber der Überladung
float sin(float);
double sin(double);
-
Don't feed...
-
Jester schrieb:
Welchen Vorteil hätte das template denn gegenüber der Überladung
float sin(float);
double sin(double);wenn ich einfach mal den sinus von nem int haben will und den auch als int wieder haben will? Gibt doch keiner einem das Recht für jemanden zu entscheiden "Braucht kein Mensch!". In C++ wird doch immer darüber geprallt mit Templates und co. aber hier wird es nicht getan - nur weil jemand mal denkt "Nö brauchen wir nicht"?
@Tim.
Halt dich einfach raus, wenn du nichts zum Thema zu sagen hast.
-
sinus user schrieb:
wenn ich einfach mal den sinus von nem int haben will und den auch als int wieder haben will?
Alles klar

-
sinus user: okay, du hast recht. ich wollte es (wie die anderen hier auch) nur nicht wahr haben. könntest du deine korrekturen beim standard-komitee einreichen? damit kann dieser makel an c++ endlich ausgemerzt werden.
-
Jester schrieb:
sinus user: okay, du hast recht. ich wollte es (wie die anderen hier auch) nur nicht wahr haben. könntest du deine korrekturen beim standard-komitee einreichen? damit kann dieser makel an c++ endlich ausgemerzt werden.
sarkasmus steht einer kompetenz wie deiner einfach nicht.
Doch man muss einfach sagen (Ob es Sinn macht oder nicht), das dies nicht konsequenterweise für diesen Bereich und auch andere Bereiche auf Templates umgesetzt wurde. Nur weil Leute denken "Macht keinen Sinn" oder weil sie zu Faul dafür waren. Geht ums Prinzip.
-
Also entweder ich bin heute etwas schwer von Begriff (was ich nicht hoffen will ;)) oder du drückst dich immer noch unklar aus, aber ich verstehe immer noch nicht, wozu du da unbedingt ein Template benötigst. Und noch weniger verstehe ich, inwieweit dein seltsamer Template-"Workaround" dort besser sein sollte als die normale sin()-Funktion.
-
ich kann mit diesem workaround nun sin mit jedem datentyp ob int, char, float usw. benutzen was ich mit einer deklaration von nur float/double nicht kann.
-
sinus user schrieb:
ich kann mit diesem workaround nun sin mit jedem datentyp ob int, char, float usw. benutzen was ich mit einer deklaration von nur float/double nicht kann.
Nochmal: Klar kannst du die Funktion sin() mit jedem Datentyp verwenden, der eine implizite Konvertierung nach double erlaubt (und das trifft auf jeden Fall für alle eingebauten Zahlentypen von C++ zu). Mit deinem Template ersetzt du lediglich die implizite Konvertierung durch eine explizite Konvertierung.
(und obendrein schneidest du dir selber Rechengenauigkeit ab, indem du runtergehst bis auf float)
-
wer sagt denn das ich rechengenauigkeit benötige und nicht nur die zahl die vor dem komma steht? wie schon gesagt: sinus ist nur ein beispiel, bei log kommt das evtl. noch was besser rüber.
aber wenn ich
z. B. folgenden code habe:
int wert = 839245; wert = sin (wert);bekomm ich unter dem DevC++ und unter VC++2005 Express eine warnung wegen datenverlust, da der auf float konvertiert (da es eben kein Template für sin gibt). Mit meinem "workaround" bekomme ich dies nicht.