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

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

1

01.09.2010, 14:13

prob. mit template und constructor

Hi hab ein Problem bzw. Fehler und hab ka was der zu beteuten hat.
Hab ein template klasse und für den Constructor soll ein spezielles template gelten.

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
27
28
29
30
31
32
33
34
35
36
37
38
39
template<typename T>
        class Color4{
            public:
            T r;
            T g;
            T b;
            T a;

            Color4():
                r(0),
                g(0),
                b(0),
                a(0)
            {}

            Color4(T r,T g,T b,T a):
                r(r),
                g(g),
                b(b),
                a(a)
            {}


            Color4(const Color3<T>& col):
                r(col.r),
                g(col.g),
                b(col.b),
                a(1)
            {}

            template<>
            Color4<ubyte>(const Color3<ubyte>& col): //hier Fehler
                r(col.r),
                g(col.g),
                b(col.b),
                a(255)
            {}

};

Fehler:
error: explicit specialization in non-namespace scope `class Color4<T>'
error: enclosing class templates are not explicitly specialized
error: `Color4<ubyte>' specified as declarator-id
error: `Color4<ubyte>' is not a template function
error: invalid function declaration

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

2

01.09.2010, 14:16

Das Problem ist dass du da ne Spezialisierung von etwas machst das es nicht gibt. Du musst das Konstruktortemplate zumindest deklarieren bevor du es Spezialisierst:

C-/C++-Quelltext

1
2
3
4
5
    template<typename U>
    Color4(const Color3<U>& col);

    template<>
    Color4<ubyte>(const Color3<ubyte>& col) ...

Wobei ich nicht ganz versteh warum du nicht gleich ein allgemeines copy ctor template definierst.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »dot« (01.09.2010, 14:22)


dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

3

01.09.2010, 14:43

Vielleicht auch eine generelle Frage dazu: Was genau versprichst du dir von einer Color3<ubyte>. Macht es wirklich Sinn ein und das selbe template für 32bit integer und 128bit float Farbwerte zu verwenden? Immerhin sind Color4<ubyte> und Color4<float> sowieso unterschiedliche Typen. Wenn wäre es vielleicht sinnvoll mit Traits und Policies zu arbeiten um z.B. die unterschiedlichen Wertebereiche etc. zu berücksichtigen!? Oder vielleich nicht doch zwei verschiedene Klassen für float und integer Farben? Immerhin könntest du 8bit/Kanal integer Farben in einen int packen, was evtl. effizienter wäre usw.

kiba

Alter Hase

  • »kiba« ist der Autor dieses Themas

Beiträge: 327

Wohnort: NRW

Beruf: Azubi: Fach-Info. Anw.

  • Private Nachricht senden

4

01.09.2010, 15:13

Mit geht dabei das bei foat,double in OpenGL Color der Werte bereich von 0.0f - 1.0f ist
und bei ubyte idst es eben 0-255.
Das berechnen und addieren und so is ja gleich.
Hmmm.....wäre vll eifnach 2,3 klassen(mit double(float),int,ubyte) zu machen, dann einfach einfach per copy ctor in die heweiligen klassen zu convert.

Werbeanzeige