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

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

1

10.03.2007, 13:59

Templates

hi,
ich habe folgendes problem.
ich habe eine template funktion, die mit die schnittstelle von directx zurück gibt. der return wert ist in meinem fall unbekannt. es kann entwerder von dem typ "PDIRECT3DDEVICE9" oder von dem typ "ID3D10Device" sein. aber ich bekomme beim compilieren immer folgende fehler meldung:

[list]
1>d:\c++\projekte\blackengine\enginetest\enginetest\main.cpp(30) : error C2783: 'T Black_D3D::GetDevice(void) const' : could not deduce template argument for 'T'
1> d:\c++\sachen, die gelinkt werden oder eingebunden\includes\blackengine\black_d3d.h(123) : see declaration of 'Black_D3D::GetDevice'
[/list]
ich habe bei msdn und google nichts gefunden was mir in dem fall weiter hilft.
hat jemand ne idee was das problem sein könnte?
thx

rewb0rn

Supermoderator

Beiträge: 2 773

Wohnort: Berlin

Beruf: Indie Game Dev

  • Private Nachricht senden

2

10.03.2007, 14:21

zeig mal die deine funktion

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

3

10.03.2007, 14:22

gut, man könnte sie noch verbessern, aber im prinzip bleibt es ja das selbe:

C-/C++-Quelltext

1
2
    template<class T>
    inline T GetDevice()const       { if(Direct3D10 == true) return D3D10Device else return D3DDevice;}

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

10.03.2007, 14:36

C-/C++-Quelltext

1
PDIRECT3DDEVICE9 foobar = GetDevice< PDIRECT3DDEVICE9 >();


Musst den Typ schon angeben.
@D13_Dreinig

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

5

10.03.2007, 14:42

warum muss ich den typen angeben. dan kann ich auch gleich ganz normale funktionen nehmen.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

10.03.2007, 14:51

Jep, kannst du. Dem Compiler ist es nicht möglich zur Kompilierzeit festzustellen welche Funktion generiert werden soll. Daher musst du den Typ explizit angeben oder das ganze ganz anders lösen. Über ein Interface mit zwei abgeleiteten Klassen z.B.
@D13_Dreinig

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

7

10.03.2007, 14:56

also ich habe vergessen das sich das ganze in einer dll abspielt.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

8

10.03.2007, 14:58

und was ändert das?

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

9

10.03.2007, 15:01

Zitat von »"Ghostrider"«

also ich habe vergessen das sich das ganze in einer dll abspielt.


Dann musst du die Funktionen sowiso eindeutig machen. Templatefunktionen können nicht in eine Dll exportiert werden.
@D13_Dreinig

BlackSnake

Community-Fossil

  • »BlackSnake« ist der Autor dieses Themas

Beiträge: 1 549

Beruf: Student

  • Private Nachricht senden

10

10.03.2007, 15:07

also der ganze sinn der dahinter steckt ist eigentlich der:

der user soll zuanfang nur auswählen ob directx9 oder 10(falls verfügbar). danah regelt die engine alles selber. die effecte werden erstellt, die renderpipline eingestellt usw....

das der benutzer mal auf die schnittstelle zurückgreifen möchte ist klar. jetzt soll der aber nicht 50 methoden zuverfügung habe sondern pro paar immer nur 2. Bsp.:

C-/C++-Quelltext

1
virtual inline GetDevice()const ..........


aber nicht sowas

C-/C++-Quelltext

1
2
virtual inline GetDevice9()const .........
virtual inline GetDevice10()const ..........


er soll automatisch die richtige bekommen

Werbeanzeige