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

PD

unregistriert

11

28.10.2004, 02:51

Ich stelle zur Thematik Tmeplatfunktionen mal noch ne frage ohne dafür nen neuen thread zu machen ^^

Mich würde mal intressieren ob man 2 Variablen auf den gleichen Datentyp überprüfen kann. Ein beispiel, ich habe folgende Template Funktion:

C-/C++-Quelltext

1
template<class a, class b> void weissnicht();


Kann ich nun irgendwie überprüfen ob a und b vom selben typ sind? Gibt es da eine möglichkeit?

Till

Alter Hase

Beiträge: 378

Wohnort: Lincoln College, Oxford

Beruf: Student

  • Private Nachricht senden

12

28.10.2004, 14:10

Man kann mit "typeid" zur Laufzeit den Typ bestimmen. Der Rückgabewert gehört zur Klasse type_info:

Zitat von »"Microsoft"«


type_info Class
C++ Specific —>

The type_info class describes type information generated within the program by the compiler. Objects of this class effectively store a pointer to a name for the type and an encoded value suitable for comparing two types for equality or collating order. The encoding rules and collating sequence for types are unspecified and may differ between programs.

class type_info {
public:
virtual ~type_info();
int operator==(const type_info& rhs) const;
int operator!=(const type_info& rhs) const;
int before(const type_info& rhs) const;
const char* name() const;
const char* raw_name() const;
private:
...
};
Note You must include the typeinfo.h header file in order to use the type_info class.

END C++ Specific
DOMINVS ILLVMINATIO MEA
---
Es lebe unmanaged Code!
---
>> Meine Uni <<

PD

unregistriert

13

28.10.2004, 17:49

Bleib ich in diesem thread *g*
Habe folgende Methode:

C-/C++-Quelltext

1
template<class T> inline T* Get() { ... }


und folgender Aufruf

C-/C++-Quelltext

1
cObjm.Get<CGrafik>()->update(); 


verursacht folgenden Fehler:

Zitat

c:\dokumente und einstellungen\pq\desktop\programmieren\the labyrinth\mainclass.cpp(52) : error C2275: "CGrafik" : Ungültige Verwendung dieses Typs als Ausdruck
c:\dokumente und einstellungen\pq\desktop\programmieren\the labyrinth\grafik.h(19) : Siehe Deklaration von 'CGrafik'
c:\dokumente und einstellungen\pq\desktop\programmieren\the labyrinth\mainclass.cpp(52) : error C2059: Syntaxfehler : ')'


Der Aufruf ist Zeile 52 in mainclass.cpp ^^

Hat einer ideen woher die Fehler kommen? ich find einfach nix..

PD

unregistriert

14

28.10.2004, 21:21

Kann mir keiner helfen? :(

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

15

29.10.2004, 15:55

Aus dem Code, den du gezeigt hast, kann ich jetzt keinen Fehler erkennen, aber zu dem Problem davor kann ich was sagen:

Zitat


Mich würde mal intressieren ob man 2 Variablen auf den gleichen Datentyp überprüfen kann. Ein beispiel, ich habe folgende Template Funktion:


Code (C++):
template<class a, class b> void weissnicht();


Kann ich nun irgendwie überprüfen ob a und b vom selben typ sind? Gibt es da eine möglichkeit?

Ja, die gibt es:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template<typename T, typename U>
struct AreSame {
   enum {value = false};
};

template<typename T>
struct AreSame<T, T> {
   enum {value = true};
};


Dann kannst du in der Funktion per AreSame<A, B>::value zur Compilezeit abfragen, ob die Typen identisch sind.

PD

unregistriert

16

29.10.2004, 18:03

kann es sein das es ein generelles Problem mit einer Template Methode innerhalb einer normalen Klasse ist? Habe folgenden Code getestet mit selbem ergebnis:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>

class a {
private:
    int r;
public:
    template<class T> T Get() { return static_cast<T>(r); }
};



int main() {
    a b;
    std::cout << (b.Get<int>()) << std::endl;
    
    return 0;

}


Folgender Fehler:

Zitat

C:\Dokumente und Einstellungen\PQ\Desktop\Programmieren\test\main.cpp(14) : error C2062: 'int'-Typ unerwartet


ich werd einfach nicht schlau draus...

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

17

30.10.2004, 11:08

Handelt es sich zufällig um den MSVC 6, den ihr da verwendet?

PD

unregistriert

18

30.10.2004, 11:25

jup, ich benutze VC6... wieso? ^^

helium

Treue Seele

Beiträge: 180

Wohnort: NRW, Burscheid (nahe Köln)

  • Private Nachricht senden

19

30.10.2004, 13:40

Weil genau das das Problem ist. Das Program ist korrekt, der Compiler aber zu blöd. Der MSVC 6 ist doch bekannt dafür, das er mit Template-Code nicht klarkommt. Mein 'AreSame' wird auch nicht funktionieren, genau wie viele andere Dinge.

Beispielsweise das beliebte

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template <bool, typename T, typename U>
struct Select {
   typedef T;
};
template <typename T, typename U>
struct Select<false, T, U> {
   typedef U;
};

mag er auch nicht, ...

Generell kann er keine Template-Templates, keine partielle Spezialisierung und hat viele Probleme mit Templates-Methoden.

Auch sonst gibt es einige Situationen, in denen er probleme hat. Ich glaube bei sowas gabs nen internen Compilerfehler, bin mir aber nicht sicher:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
template <typname T>
struct SimplesTemplate {
   typedef T Type;
};

template <typaname T>
struct AnderesTemplate {
   typedef typename SimplesTemplate<T>::Type Type;
};

PD

unregistriert

20

30.10.2004, 13:46

Also sollte ich MSVC6 inne tonne kloppen und doch lieber wieder auf DevC++ umsteigen? ^^

Werbeanzeige