static-const-Variablen von Template-Klassen ohne Angabe der Parameter benutzen
-
Kann ich (wie?) static-const-Variablen von Template-Klassen, die nicht von den Template-Parametern abhängen, benutzen, ohne dass ich die Template-Parameter angeben muss?
template <class T> class Foo { public: static const int infty = 0x0FFFFFFF; } // nicht Foo<int>::infty; // sondern Foo::infty;
-
nein.
denn Foo gibt es nicht. (incomplete type)
es gibt nur Foo<int> oder Foo<char>
und beide sind vollkommen unterschiedliche typen.
-
Aber der Compiler braucht doch T nicht zu kennen, um Foo<>::infty zu ermitteln.
-
Original erstellt von Norondion:
Aber der Compiler braucht doch T nicht zu kennen, um Foo<>::infty zu ermitteln.aber
Foo<int>::infinity
und
Foo<char>::infinity
sind 2 verschiedene variablen...
-
aber infty ist bei beiden dasselbe
-
Wenn du die Klasse implemetierst braucht der Compiler das nicht zu wissen!
Aber bei der Verwendung schon!
Du solltest dich mal näher mit dem Thema Templates auseinandersetzen, dann würdest du das wissen!
Google mal wieder!
[url] www.google.de [/url]
C u
-
Original erstellt von Shade Of Mine:
aber
Foo<int>::infinity
und
Foo<char>::infinity
sind 2 verschiedene variablen...Weils ja auch 2 verschiedene Klassen sind
@Norondion
Guck mal hier oder in ein gutes C++ Buch
-
aber infty ist bei beiden dasselbe
Nein. So wie du es geschrieben hast nicht. So erhält *jede* unterschiedliche Instanziierung von Foo seine eigene infty-Konstante.
Was du hier brauchst ist das "hoisting idiom" (in diesem Fall auch bekannt unter "Thin template idiom")
class Base { public: static const int infty = 0x0FFFFFFF; protected: ~Base() {} }; const int Base::infty; template <class T> class Foo : public Base { public: //... };
Solange du allerdinsg nicht die Adresse von infty nimmst, brauchst du hier allerdings überhaupt keine Definition für infty, da es sich um eine Ganzahlkonstante handelt.