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

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

1

27.08.2009, 17:34

typedef für template klasse

Hallo Leute!

Ich bin heute über was (für mich) komisches gestolpert. Und zwar wollte ich ein typedef für std::map anlegen. Was aber mit

Quellcode

1
typedef lala std::map


Zu einem compiler fehler führt, da kein template typ angegeben ist.
Nach meinem Verständnis von typedef sollte doch aber der compiler dann aus

Quellcode

1
lala<int>

ein

Quellcode

1
std::map<int>


machen, oder nicht?
Mit einem define funktionert das natürlich, aber ich frage mich (rein aus interesse, bin das mittlerweile anders angegangen) warum das mit einem typedef nicht funktioniert.

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

2

27.08.2009, 17:47

template typedefs gibst in C++ 2003 noch nicht. Du musst den Typen also angeben. In C++0x wird das dann aber unterstützt.

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

3

27.08.2009, 18:24

ah ok. danke

4

27.08.2009, 18:35

Du hast hier die Reihenfolge verwechselt, zuerst steht der alte Typ:

C-/C++-Quelltext

1
typedef lala std::map

Der momentane Workaround besteht übrigens aus einem Member-Typedef:

C-/C++-Quelltext

1
2
3
4
5
6
7
template <typename T>
struct map
{
    typedef std::map<T> type;
};

map<int>::type my_map;

Lohnt sich in diesem Fall eigentlich nicht wirklich, aber für sonst...

ChrisJ

Alter Hase

Beiträge: 487

Wohnort: Schweich

Beruf: Schüler

  • Private Nachricht senden

5

27.08.2009, 19:49

C-/C++-Quelltext

1
2
3
4
namespace std
{
template<class Type> map : public lala<Type> { }; 
}


sollte doch funktionieren, oder?
"Don't trust your eyes: They are a hell of a lot smarter than you are"

Sylence

Community-Fossil

  • »Sylence« ist der Autor dieses Themas

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

6

27.08.2009, 20:00

Zitat von »"Nexus"«

Du hast hier die Reihenfolge verwechselt, zuerst steht der alte Typ:

C-/C++-Quelltext

1
typedef lala std::map


Oh natürlich :oops:
Naja Browser sind halt nicht zum programmieren da ^^

@ChrisJ: ja funktioniert

drakon

Supermoderator

Beiträge: 6 513

Wohnort: Schweiz

Beruf: Entrepreneur

  • Private Nachricht senden

7

27.08.2009, 20:33

Zitat von »"ChrisJ"«

C-/C++-Quelltext

1
2
3
4
namespace std
{
template<class Type> map : public lala<Type> { }; 
}


sollte doch funktionieren, oder?


Funktioniert vielleicht, ist aber nicht standardkonform. Dem Namensraum std darf nicht verändert und nichts hinzugefügt werden.

8

28.08.2009, 00:18

Davon abgesehen ist Vererbung kein Ersatz für Template-Typedefs. Damit sind nämlich lala<Type> und map unterschiedliche Typen, nicht jedes lala<Type> ist eine map.

Werbeanzeige