Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

1

16.03.2016, 17:22

Templates: Kann man in sie auch Instanzen von Klassen schreiben?

Hallo,
funktioniert es, eine Funktion zu schreiben, die ein Template übergeben bekommt. Dieses Template ist später eine Instanz einer Klasse. Kann die Funktion dann Funktionen dieser Klasse aufrufen?
Also ungefähr so:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include "class1"

template <class object>
void test(object object1)
{
   object1.hello();
}

int main()
{
   class1 BeispielInstanz1;    // neue Instanz vom Typ "class1"
   test(BeispielInstanz1);     // test aufrufen
   return 0;
}


Die Funktion "hello" gibt dann z.B. Hallo in der Konsole aus.
Wenn noch was unklar ist bitte einfach sagen.

Mfg
Typ

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

16.03.2016, 17:25

Ja das funktioniert; zumindest dein Code sollte so funktionieren, deine Frage macht keinen Sinn, denn das Template ist da das test und nicht das object. Du willst außerdem vermutlich eher eine Reference auf dein object übergeben und nicht eine Kopie des object!? ;)

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

3

16.03.2016, 17:28

Ok, danke für die schnelle Antwort.
Ich hab noch nicht so viel mit Templates gearbeitet, muss ich in dem Fall irgendwas beachten? Weil bei mir kommt so ein bescheuerter LinkerFehler:

Zitat

verweis auf nicht aufgelöstes externes symbol ""private: int __thiscall c3dprinter::timer(long,long)" (?timer@c3dprinter@@aaehjj@z)" in funktion ""public: void __thiscall c3dprinter::update(struct sdl_renderer *)" (?update@c3dprinter@@qaexpausdl_renderer@@@z)".


Edit: Ja, im echten Code hab ich auch ne Referenz :thumbup:

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

16.03.2016, 17:29

Nun, der Linkerfehler beklagt, dass die Funktion c3dprinter::timer() nirgendwo definiert ist...

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

5

16.03.2016, 17:33

Mh, abgesehen davon, dass die eigentlich nichts mit dem Template-"Problem" zu tun hat sollte die auch nicht exisiteren...

Aber mein eigentliches Problem ist damit gelöst. Vielen Danke nochmal :)

6

16.03.2016, 18:12

Mal rein von der Überschrift her: Nein.
Templates werden zur Kompilierzeit evaluiert, Instanzen sind Sache der Laufzeit!

MfG
Check

idontknow

unregistriert

7

16.03.2016, 18:23

Mal rein von der Überschrift her: Nein.
Templates werden zur Kompilierzeit evaluiert, Instanzen sind Sache der Laufzeit!

MfG
Check

In Bezug auf Templates bezeichnet man das instanziierte Template mit eingesetzten Typ-Argumenten auch als Instanz!

8

16.03.2016, 18:34

Ja, aber bei dem Titel "Kann man in sie auch Instanzen von Klassen schreiben?" ist wohl ersichtlich, dass die Bedeutung nicht gemeint war, oder?

MfG
Check

Typ

Frischling

  • »Typ« ist der Autor dieses Themas
  • Private Nachricht senden

9

16.03.2016, 23:13

Wie hätte ich die Überschrift fachlich korrekt schreiben müssen?
Dann ändere ich sie gerne.
( Mir war klar, dass man das eigentlich nicht so schreibt, aber ich wusste nicht wie ich es sonst schreiben soll :hmm: )

Sacaldur

Community-Fossil

Beiträge: 2 301

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

10

16.03.2016, 23:54

Gegenfrage: was willst du denn erreichen?
Das, was in deinem Beispiel zu sehen ist, wäre auch mit einer gemeinsamen Basisklasse zu erreichen, solange die Basisklasse auch sinnvoll wählbar ist. (Ist das jedoch nicht der Fall, ist das schon ein Indiz dafür, dass das Design an und für sich schlecht ist.)
Welchen Anwendungsfall hast du denn, bei dem du am Überlegen bist, eine solche Lösung zu verwenden?
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Werbeanzeige