Schnick und Schnack
Level-1
- Beiträge
- 226
- Reaktionspunkte
- 27
kennt Codesys nicht auch den Parametertyp ANY ?
Ob das unbedingt sinnvoll ist wenn man die Typüberprüfung des Compilers durch die Verwendung von Zeigern aufgibt ist eine andere Frage.
... jetzt bin ich aber enttäuscht ... es gibt keinen ANY oder ein Pendant dazu ...!?
In dem Fall käme der (etwas unelegante) Vorschlag von ST allerdings einer Überladung noch am Nächsten ...
Ja, so war es gemeint. Schön ist das natürlich nicht, da möchte man sich eher übergeben statt überladen. Ich tendiere bei solchen Sachen doch eher zu einzelnen Funktionen für jeden Datentyp. In CoDeSys 3 wird es auch nicht gehen. Man kann zwar vererbte Methoden ersetzen, ihnen aber keine anderen Input-Variablen verpassen. Immerhin soll es möglich werden, ANY_TYPE- und ANY_NUM-Variablen als Input-Parameter an Funktionen zu übergeben, in der Version 3.4 ist das aber auch noch nicht umgesetzt.Nein ... habe ich nicht - ganz im Gegenteil.
In der Siemens-Welt geht es halt nur nicht und in (zumindestens deiner) Codesys-Welt anscheinend auch nicht.
Den Vorschlag von ST habe ich so aufgenommen, dass er einen Baustein macht mit mehreren unterschiedlichen Input-Variablen von denen die jeweils beschaltete weiterverwendet wird - das ist nur eine Pseudo-Überladung (leider).
Gruß
Larry
Ich tendiere bei solchen Sachen doch eher zu einzelnen Funktionen für jeden Datentyp.
Man kann zwar vererbte Methoden ersetzen, ihnen aber keine anderen Input-Variablen verpassen.
Immerhin soll es möglich werden, ANY_TYPE- und ANY_NUM-Variablen als Input-Parameter an Funktionen zu übergeben, in der Version 3.4 ist das aber auch noch nicht umgesetzt.
Also zunächst mal: die Norm kennt zwar diese ANY-Datentypen, diese sind aber nicht zum Programmieren gedacht.
Die werden für die Zwecke der Norm benutzt. Die Norm kennt prinzipiell nur bei den Standardoperatoren "Überladungen" und das wird selbst
mit der nächsten Version noch so bleiben.
Der Grund ist relativ einfach: es ist sauschwer, ordentliche Regeln zu formulieren, wie Überladung funktionieren soll.
Was für eine Überladung soll aufgerufen werden für fun(1)? BOOL, WORD, INT, DINT? für fun(-1)? für fun(0)?
Das ist ziemlich fehlerträchtig. Wenn man aber fordert fun(BOOL#1) zu schreiben, was ist dann gewonnen gegenüber
fun_BOOL(1)?
Ja das läuft anders ab. Der Compiler kennt die Funktion LIMIT (und die anderen Operatoren) und behandelt die speziell. Und auch bei den impliziten Funktionen gibt es immer wieder Probleme, wie etwaIn C++ wird anhand der Signatur entschieden welche Funktion letztendlich aufgerufen wird, die Regeln sind meine ich auch klar. Wie man an diversen Funktionen wie z.B. auch LIMIT() sieht, scheint diese grundsätzliche Funktion in Codesys also schon vorhanden zu sein. Oder läuft es bei diesem Funktionen anders ab?
Für die Stringfunktionen haben wir beispielsweise auch keine Überladung definiert, und bis jetzt hat sich noch keiner beschwert dass er einmal CONCAT und einmal WCONCAT schreiben muss.
Was für eine Überladung soll aufgerufen werden für fun(1)?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?
We use cookies and similar technologies for the following purposes:
Do you accept cookies and these technologies?