template declaration of typedef nicht erlaubt?
-
Servus,
ich habe eine Templateklasse, die von drei Parametern abhängt. Für einen Teil meines Programms sind aber die ersten beiden Template-Argumente fix und ich würde daher gerne aus Schreibarbeitsgründen einen typedef anlegen. Das geht aber nicht, da ja ein Parameter frei bleiben muss:
template <typename A, typename B, typename C> class Foo{ // declarations.. }; // Statt Foo<Bar, Blah, int> würde ich gerne Blubb<int> schreiben wollen: template <typename T> typedef Foo<Bar, Blah, T> Blubb<T>Das moniert der Kompiler (gcc 4.4) mit einem schlichten
"error: template declaration of ‘typedef’"Gibt's einen Weg hier eine convenience-Typedef zu machen?
Gute nacht,
Phil
-
Ich glaube das geht erst mit dem neuen Standard... bin mir aber nicht sicher.
-
Template Typedefs sind nicht möglich. Im nächsten C++-Standard wird es Template Aliases geben.
Momentan kannst du dir sowas basteln:
template <typename T> struct Blubb { typedef Foo<Bar, Blah, T> Type; };
-
http://www.drakon.ch/
Siehe template alias im Beitrag vom 27. Dezember 2009...
Simon
-
Ahh danke, das mit dem struct funktioniert !
Ich glaube, ich hab letztes Jahr zuviel Scheme programmiert... Ständig möchte ich aus Funktionen mit 4 Parametern durch setzen zweier Parameter Funktionen mit zwei Parametern erzeugen, und jetzt wo das mit boost::lambda geht, versuche ich diese Denkweise auf Templates zu übertragen.
-
PhilippM schrieb:
Ständig möchte ich aus Funktionen mit 4 Parametern durch setzen zweier Parameter Funktionen mit zwei Parametern erzeugen, und jetzt wo das mit boost::lambda geht
Wäre für das Binden von Argumenten nicht eher Boost.Bind geeignet?
Keine Sorge, mit C++0x eröffnen sich unter anderem neue Möglichkeiten hinsichtlich funktionaler Programmierung, da z.B. Lambda-Ausdrücke direkt als Sprachmittel angeboten werden.

-
Nexus schrieb:
PhilippM schrieb:
...jetzt wo das mit boost::lambda geht
Wäre für das Binden von Argumenten nicht eher Boost.Bind geeignet?
Mein ich doch... Aber lambda ist auch fein

Hat nur leider alles den Nachteil, das die WTF-Rate*) beim reviewen meines Codes (durch die Leute, die Templates nur alle heiligen Zeiten mal benutzen) in letzter Zeit extrem angestiegen ist:
-
Naja, und was dahinter steckt, ist auch nicht ganz ohne. Der Typ des Ausdrucks
_1 > 15 && _2 < 20ist zum Beispiel
lambda_functor< lambda_functor_base< logical_action<and_action>, tuple< lambda_functor< lambda_functor_base< relational_action<greater_action>, tuple< lambda_functor<placeholder<1> >, int const > > >, lambda_functor< lambda_functor_base< relational_action<less_action>, tuple< lambda_functor<placeholder<2> >, int const > > > > > >(Quelle: http://www.boost.org/doc/libs/1_35_0/doc/html/typeof.html)
Boost.Bind gefällt mir sehr, vor allem in Verbindung mit Boost.Function, aber Boost.Lambda benutze ich selbst nicht...
-
Und ich wunder mich immer, warum an meinem Notebook der CPU-Lüfter aufdreht, wenn ich was kompiliere...

-
PhilippM schrieb:
Und ich wunder mich immer, warum an meinem Notebook der CPU-Lüfter aufdreht, wenn ich was kompiliere...

LOL
-
Also wenn ich Nexus Code so sehe, frage ich mich ob ich kotzen oder die Hand in die Hose führen soll.
-
theta schrieb:
http://www.drakon.ch/
Siehe template alias im Beitrag vom 27. Dezember 2009...
SimonEs gibt auch Dierct Links:
http://www.drakon.ch/?id=&offset=&mobile=0&show_entry=84Einfach auf den Titel des Beitrages klicken und dann hat man den Beitrag einzeln.
(das verlinken mit Datum hat mich auch immer genervt, darum habe ich das dann auch eingebaut. :))