Hypercell ein ] Hypercell aus ] Zeige Navigation ] Verstecke Navigation ]
c++.de  
   
Forentreff 2012     
Bücher-Shop mit Amazon (Buchkategorien)C++ : Referenzen zu C++ : C++ Builder : Visual C++ : C# : Java : Spieleprogrammierung : Systemprogrammierung Linux : Software-Entwicklung : .NET : Compilertechnik : Algorithmen & Datenstrukturen : Objektorientierung : Entwurfsmuster : UML : eXtreme Programming : Scrum : Projektmanagement : Software-Testing : Datenbanken : Tom DeMarco : Dilbert : User Friendly
C/C++ Forum :: Die Artikel ::  Einführung in die Programmierung mit Templates  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5
  Zeige alle Beiträge auf einer Seite
Auf Beitrag antworten
Autor Nachricht
GPC
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6290
Beitrag GPC Moderator 23:50:24 28.04.2007   Titel:              Zitieren

Was willst du überhaupt machen? Die Methode setElement für int spezialisieren?
Blubbby
Unregistrierter




Beitrag Blubbby Unregistrierter 23:58:10 28.04.2007   Titel:              Zitieren

Richtig. Genau das. Ich weiß, dass das schwachsinnig ist, aber irgendwie muss ich das ja ausprobieren nur klappt das nicht...

/edit by GPC: nick gekürzt


Zuletzt bearbeitet von GPC am 00:58:34 29.04.2007, insgesamt 1-mal bearbeitet
GPC
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6290
Beitrag GPC Moderator 01:18:20 29.04.2007   Titel:              Zitieren

Na ja, mir fehlt etwas der konkrete Anwendungsfall, aber wenn du z.B. den Code ausführst:
C/C++ Code:
//hier dein Code

int main() {
  MyClass<float> fc;
  fc.setElement(2.5f);
  fc.setElement(2);
}
C/C++ Code:
//hier dein Code

int main() {
MyClass<float> fc;
fc.setElement(2.5f);
fc.setElement(2);
}
C/C++ Code:
//hier dein Code

int main() {
  MyClass<float> fc;
  fc.setElement(2.5f);
  fc.setElement(2);
}


dann gibt's folgende Ausgabe:
Code:
gpc@desktop:~$ g++ -o main main.cpp
gpc@desktop:~$ ./main
[Typ]NewElement: ???
[Typ]NewElement: int
Code:
gpc@desktop:~$ g++ -o main main.cpp
gpc@desktop:~$ ./main
[Typ]NewElement: ???
[Typ]NewElement: int
Code:
gpc@desktop:~$ g++ -o main main.cpp
gpc@desktop:~$ ./main
[Typ]NewElement: ???
[Typ]NewElement: int


Btw. Bitte verwende einen kürzeren Nick. Danke :)

MfG

GPC
Blubbby
Unregistrierter




Beitrag Blubbby Unregistrierter 14:45:19 29.04.2007   Titel:              Zitieren

So habe ich aber keine Spezialisierung sondern nur eine normale Überladung. Kann doch nicht richtig sein?
GPC
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6290
Beitrag GPC Moderator 18:17:51 29.04.2007   Titel:              Zitieren

Stimmt, das ist Überladung. Da du aber ein Klassentemplate hast, kannst du auch nur das spezialisieren (partiell oder vollständig). D.h. entweder die Überladung oder du machst es so:

C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Generisch:
template <typename T>
struct Foo {
  T bar;

  void set_bar(const T &x) { bar = x; }
  const T& get_bar() const { return bar; }
};

//Für ints:
template <>
struct Foo<int> {
  //hier spezialisierte Versionen der Methoden von oben
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Generisch:
template <typename T>
struct Foo {
T bar;

void set_bar(const T &x) { bar = x; }
const T& get_bar() const { return bar; }
};

//Für ints:
template <>
struct Foo<int> {
//hier spezialisierte Versionen der Methoden von oben
};
C/C++ Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//Generisch:
template <typename T>
struct Foo {
  T bar;

  void set_bar(const T &x) { bar = x; }
  const T& get_bar() const { return bar; }
};

//Für ints:
template <>
struct Foo<int> {
  //hier spezialisierte Versionen der Methoden von oben
};

Damit hast du allerdings die Klasse spezialisiert.


Template-Methoden spezialisieren geht auch, aber dann brauchst du template-Methoden.
camper
Mitglied

Benutzerprofil
Anmeldungsdatum: 06.08.2004
Beiträge: 5052
Beitrag camper Mitglied 21:51:00 30.04.2007   Titel:              Zitieren

btw, SFINAE steht für substitution failure is not an error
Badestrand
Mitglied

Benutzerprofil
Anmeldungsdatum: 29.08.2006
Beiträge: 4342
Beitrag Badestrand Mitglied 18:58:32 07.09.2008   Titel:              Zitieren

Magst du evtl noch die Syntax für Template-friend-Deklarationen mit reinnehmen? Solche speziellen Sachen vergess ich immer, brauch's ja auch fast nie :) edit: Hier meine ich template<typename[,...]> friend class XYZ;
Achso, und magst du vielleicht auch noch mal explizit reinschreiben, dass es keine partiell spezialisierten Funktionen gibt? Hatte neulich vergessen, dass es nur mit Klassen geht und mir 'nen Wolf gesucht :D


Zuletzt bearbeitet von Badestrand am 19:19:19 07.09.2008, insgesamt 1-mal bearbeitet
GPC
Moderator

Benutzerprofil
Anmeldungsdatum: 11.07.2004
Beiträge: 6290
Beitrag GPC Moderator 22:14:18 07.09.2008   Titel:              Zitieren

Kann ich machen, aber nach der Klausurphase...
C/C++ Forum :: Die Artikel ::  Einführung in die Programmierung mit Templates  
Gehen Sie zu Seite Zurück  1, 2, 3, 4, 5
Auf Beitrag antworten

Zeige alle Beiträge auf einer Seite




Nächstes Thema anzeigen
Vorheriges Thema anzeigen
Sie können keine Beiträge in dieses Forum schreiben.
Sie können auf Beiträge in diesem Forum antworten.
Sie können Ihre Beiträge in diesem Forum nicht bearbeiten.
Sie können Ihre Beiträge in diesem Forum nicht löschen.
Sie können an Umfragen in diesem Forum nicht mitmachen.

Powered by phpBB © 2001, 2002 phpBB Group :: FI Theme

c++.de ist Teilnehmer des Partnerprogramms von Amazon Europe S.à.r.l. und Partner des Werbeprogramms, das zur Bereitstellung eines Mediums für Websites konzipiert wurde, mittels dessen durch die Platzierung von Werbeanzeigen und Links zu amazon.de Werbekostenerstattung verdient werden kann.

Die Vervielfältigung der auf den Seiten www.c-plusplus.de, www.c-plusplus.info, www.c-sar.de, www.c-plusplus.net und www.baeckmann.de enthaltenen Informationen ohne eine schriftliche Genehmigung des Seitenbetreibers ist untersagt (vgl. §4 Urheberrechtsgesetz). Die Nutzung und Änderung der vorgestellten Strukturen und Verfahren in privaten und kommerziellen Softwareanwendungen ist ausdrücklich erlaubt, soweit keine Rechte Dritter verletzt werden. Der Seitenbetreiber übernimmt keine Gewähr für die Funktion einzelner Beiträge oder Programmfragmente, insbesondere übernimmt er keine Haftung für eventuelle aus dem Gebrauch entstehenden Folgeschäden.