so ähnlich noch für 'InputPins_t'...
Jetzt fangen, die im Gegensatz zu 'gewöhnlichen Klassen' viel längeren
Templates, schon langsam an zu nerven.
Aber es wird noch besser (für eine Tasten-Matrix):
Und das ist nur die Deklaration! An der Stelle habe ich aufgegeben.
Dieses '<port_t,ddr_t,pin_t>' gehört natürlich zum Datentyp dazu.
(*) Lässt sich das aber vielleicht trotzdem irgendwie umgehen?
Gerade sehe ich: Das ist ja noch lange nicht alles! Für 'InputPins_t'
und 'OutputPins_t' müssen ja unterschiedliche Parameter angegeben
werden, sind ja zwei verschiedene Ports. Die Template-Liste ist jetzt ja
fast schon einen Meter lang! [ siehe nochmal (*) ]
Ralf G. schrieb:> Lässt sich das aber vielleicht trotzdem irgendwie umgehen?
Typ-Aliase sind dein Freund. Schreib am Anfang deiner OutputPins_t
1
usingB=IOpin_t<port_t,ddr_t,pin_t>;
Danach kannst du statt "IOpin_t<port_t,ddr_t,pin_t>" kurz "B" schreiben.
Ralf G. schrieb:> template <typename port_t,typename ddr_t,typename pin_t>> class IOpin_t> {> protected:> port_t port;> ddr_t ddr;> pin_t pin;
Was soll das denn? Du übergibst einen (vermutlich integer-) Typ und
legst Variablen an, initialisierst sie nicht, schreibst hinein,
transferierst die Werte aber nie in die Peripherie Register?
Und was ist das für ein komischer Namensstil, Klassen -Namen auf _t
enden zu lassen?!
Scelumbro schrieb:> Mal ein Vorschlag von meiner Seite
Versuch' ich mal zu verstehen.
Dr. Sommer schrieb:> Danach kannst du statt "IOpin_t<port_t,ddr_t,pin_t>" kurz "B" schreiben.
Stimmt, hätte ich auch selber drauf kommen können. Das ist was, was ich
noch überschauen kann.
Dr. Sommer schrieb:> Und was ist das für ein komischer Namensstil
Cool, was ;-)
(Ist rein privat, einfach nicht hinsehen!)
Scelumbro schrieb:> Am Ende schnurrt das ganze zu zwei sbi zusammen :)
Leider immer nur bei solchen Minimal-Beispielen :(
Ach ja, noch was:
Dr. Sommer schrieb:> Was soll das denn?
siehe:
http://www.mikrocontroller.net/topic/goto_post/1733891
Ralf G. schrieb:> Scelumbro schrieb:>> Mal ein Vorschlag von meiner Seite> Versuch' ich mal zu verstehen.
Das ganze ist noch sehr roh (set, setDir sind unvollständig), aber
kompiliert.
Und warum sollte das ganze nicht auch für komplexere Projekte
funktionieren? Solange alles zur Compile-Zeit bekannt ist kann sich der
Compiler schön austoben.
Ralf G. schrieb:> (*) Lässt sich das aber vielleicht trotzdem irgendwie umgehen?
Kommando zurück! Der Aufwand lohnt nicht.
In den Fällen, wo der Compiler das komplette Programm sieht, ist
zwischen der oben zitierten Variante ('frisieren' der io.h), der
Übergabe von PORT/DDR/PIN als Pointer ('const' oder ganz normal) oder
als Referenz (mit Compiler-Warnung) kein Unterschied im Ergebnis!
Dazu reicht es schon bei größeren Projekten die 'weniger erwünschte
Variante' ;-) zu nehmen: Statt sauber alles in Modulen zu halten und dem
Linker das Zusammenfügen zu überlassen, einfach die "*.cpp's" statt der
Header vor der 'main()' includieren.
Ralf G. schrieb:> In den Fällen, wo der Compiler das komplette Programm sieht, ist> zwischen der oben zitierten Variante ('frisieren' der io.h), der> Übergabe von PORT/DDR/PIN als Pointer ('const' oder ganz normal) oder> als Referenz (mit Compiler-Warnung) kein Unterschied im Ergebnis!
Was für eine Warnung?
Aber in der Tat werden Pointer und Referenzen quasi gleich behandelt.
Ralf G. schrieb:> Statt sauber alles in Modulen zu halten und dem> Linker das Zusammenfügen zu überlassen, einfach die "*.cpp's" statt der> Header vor der 'main()' includieren.
Was soll das bringen? Warum nicht LTO verwenden?
Dr. Sommer schrieb:> Warum nicht LTO verwenden?
Hab' ich bis jetzt nur was davon gehört und weiß so ungefähr was es
bewirken soll. Weiter bin ich noch nicht.
Ralf G. schrieb:> Dr. Sommer schrieb:>> Und was ist das für ein komischer Namensstil> Cool, was ;-)> (Ist rein privat, einfach nicht hinsehen!)
Ist der Suffix "_t" nicht eigentlich für die C stdlib vorbehalten? Kann
das wer bestätigen?
TriHexagon schrieb:> Ist der Suffix "_t" nicht eigentlich für die C stdlib vorbehalten? Kann> das wer bestätigen?
Nein, warum?
In C ist es häufig usus, alle Typen mit _t zu garnieren.
Warum sollte das für die stdlib reserviert sein?
Klaus Wachtler schrieb:> TriHexagon schrieb:>> Ist der Suffix "_t" nicht eigentlich für die C stdlib vorbehalten? Kann>> das wer bestätigen?>> Nein, warum?> In C ist es häufig usus, alle Typen mit _t zu garnieren.> Warum sollte das für die stdlib reserviert sein?
Hab ich irgendwo aufgeschnappt. War mir deshalb nicht sicher. Aber danke
für die Berichtigung.