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

LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

1

03.08.2011, 23:33

Problem bei Template Template

Hi, ich hantiere mitlerweile häufiger mit Template Templates, aber jetzt brauche ich mal etwas Hilfe. Folgender Code wirft einen Fehler beim Kompilieren:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
template < template <typename T> class Vec > class linekd
{
    
    public:
        
        linekd()
        {
        }
        linekd(const Vec &LineStart, const Vec &LineEnd) // Hier knallt's schon mal: "error: ISO C++ forbids declaration of 'Vec' with no type"
            : Start(LineStart), End(LineEnd)
        {
        }
        
        Vec Start, End;
        
};

template <typename T> typedef linekd< vector3d<T> > line3d;

typedef line3d<int> line3di;
typedef line3d<float> line3df;

template <typename T> typedef linekd< vector2d<T> > line2d;

typedef line2d<int> line2di;
typedef line2d<float> line2df;

Compiler-Error steht als Kommentar im Code. "Vec<T>" hab ich auch schon probiert, dann kommt nur "T is not defined in this scope".

Kann mir jemand helfen?!

idontknow

unregistriert

2

04.08.2011, 00:05

error C2823: a typedef template is illegal

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
template < template <typename> class Vec, typename T > class linekd
{
    
    public:
        
        linekd()
        {
        }
        linekd(const Vec<T> &LineStart, const Vec<T> &LineEnd) // Hier knallt's schon mal: "error: ISO C++ forbids declaration of 'Vec' with no type"
            : Start(LineStart), End(LineEnd)
        {
        }
        
        Vec<T> Start, End;
        
};

template <typename T>
struct line3d
{
    typedef linekd<vector3d, T > type;
};

typedef line3d<int>::type line3di;

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »idontknow« (04.08.2011, 00:31)


LukasBanana

Alter Hase

  • »LukasBanana« ist der Autor dieses Themas

Beiträge: 1 097

Beruf: Shader Tools Programmer

  • Private Nachricht senden

3

04.08.2011, 10:12

Danke, funktioniert jetzt. Allerdings glaube ich fast, dass sich hier ein Template-Template gar nicht lohnt. Muss mal gucken wo ich sowas überall wirklich brauche.

idontknow

unregistriert

4

04.08.2011, 11:29

Naja ist halt die Frage wie dus haben willst im Prinzip ist es fast identisch. Der einzige mini Unterschied ist eigendlich nur der Wrapper für den Typedef weils template typedefs eben (noch) nicht gibt.

C-/C++-Quelltext

1
2
3
4
5
6
7
template < typename Vec > class linekd { /* ... */ }
template <typename T>
struct line3d
{
    typedef linekd<vector3d<T> > type;
};
typedef line3d<int>::type line3di;

jokester

Treue Seele

Beiträge: 125

Wohnort: Mainz

  • Private Nachricht senden

5

04.08.2011, 12:57

in C++0x sieht ein template-typedef dann so aus:

C-/C++-Quelltext

1
2
3
4
5
template<typename T>
using line3d = linekd<vector3d<T>>;

// geht dann ohne weiteres:
typedef line3d<int> line3di;
"There is a theory which states that if ever anyone discovers exactly what the Universe is for and why it is here, it will instantly disappear and be replaced by something even more bizarre and inexplicable. There is another theory which states that this has already happened" -- Douglas Adams.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

04.08.2011, 13:07

Wobei mir nicht ganz klar ist was der template template Parameter da bringt. Warum nicht einfach

C-/C++-Quelltext

1
2
3
4
5
6
7
8
template <typename PointType>
class line
{
  ...
};

typedef line<vector2d<int>> line2di;
...

idontknow

unregistriert

7

04.08.2011, 15:27

"zwischen typdef" auf 2d/3d glaube ich ;/
aber ja irgendwo nicht sonderlich sinnvoll.

Werbeanzeige