Error: Teilspezialisierung des Funktionstemplates ist nicht erlaubt
-
Hallo
ich wollte mich ein bisschen mit Metaprogrammierung beschäftigen und wollte nun eine Schleife machen, die mir Zuweisungen macht.
Also wenn ich zwei int-arrays habe der selben Länge N wollte ich mitmeta_assign<int, length>(array1, array2)den zweiten array in den ersten kopieren.
Dazu habe ich nun geschrieben:template<class T, int N> inline void meta_assign(T* a, T* b) { meta_assign<T,N-1>(a,b); a[N] = b[N]; } template<class T> inline void meta_assign<T,0>(T* a, T* b) //<- HIER IST DER FEHLER { a[0] = b[0]; }Jetzt wirft mir aber der Kompiler folgende Fehlermeldung aus:
/home/tstorch/Source/codeblocks/Test/test.hpp|12|Fehler: Teilspezialisierung »meta_assign<T, 0>« des Funktionstemplates ist nicht erlaubt|Ich habe jetzt keine Ahung, was ich falsch gemacht habe. Wäre nett wenn mir da einer ein bisschen auf die Sprünge helfen könnte.
mfg
MamboKurt
-
E0173: The C++ database found no answer to your question. Please try again later.
-
Steht doch da auf ganz klarem Deutsch.. Teilspezialisierung von Funktionstemplates sind nicht erlaubt..
-
ok
ich hab das jetzt mit klassen-templates gemacht. jetzt hab ich aber noch eine andere frage.
ich will eine template-matrix-klasse schreiben. also mit template<int N>, wobei N die dimension ist. die matrix soll dann N^2 einträge habe. gibt es eine möglich keit beim konstruktor die initialisierung der einträge aus dem rumpf raus zu holen.
im momen siehts so aus:
template<int N, class T> class meta_assign{ private: enum { go = (N-1) != 0 }; public: static inline void f(T* a, T* b) { meta_assign<go ? (N-1) : 0,T>::f(a,b); a[N] = b[N]; } }; template<class T> class meta_assign<0,T>{ public: static inline void f(T* a, T* b) { a[0] = b[0]; } }; template<class T,int N> class Matrix { private: int dimension; T entries[N][N]; public: Matrix(T* entries) : dimension(N) { meta_assign<N*N-1, T>::f(*this->entries, entries); } };ich möchte aber, dass ich entries genau wie dimension noch vor dem rumpf initialisiere.
mfg
MamboKurt