Template-Kram
-
Hallo!
Folgendes:template <class T, int height, int length> class t_matrix { public: T array[height][length]; //... //blah blah //... void print() { for (int i=0; i<height; i++) for (int j=0; j<length; j++) array[i][j].print(); } };So sieht das ganze stark vereinfacht aus.
Das Problem ist, dass der Compiler natürlich nicht wissen kann, ob für die Template-Klasse T eine print()-Funktion existiert, und meckert entsprechend rum. Ich möchte aber nur solche Klassen T verwenden, die eine solche Funktion aufweisen. Wie kann ich das dem Compiler beibringen?
Grüzli,
Krecik
-
Krecik schrieb:
Das Problem ist, dass der Compiler natürlich nicht wissen kann, ob für die Template-Klasse T eine print()-Funktion existiert, und meckert entsprechend rum. Ich möchte aber nur solche Klassen T verwenden, die eine solche Funktion aufweisen. Wie kann ich das dem Compiler beibringen?
eigentlich sollte sich der compiler genauso verhalten, wie du willst... d.h. er meckert nur wenn T kein print() hat. Die Template-Klasse wird ja erst kompiliert sobald du eine Instanz davon erstellst.
-
Hmm!
Er sagt syntax error blah blah, und dass er mit dem '.' hinter array[i][j] nichts anfangen kann oder so.
Ich benutze Visual Studio.NET.
-
Für welchen Typ hast du denn das Template ausgeprägt?
-
*war dumm*
-
#include <iostream> #include <string> using namespace std; template <class T, int height, int length> class t_matrix { public: T array[height][length]; //... //blah blah //... void print() { for (int i=0; i<height; i++) for (int j=0; j<length; j++) array[i][j].print(); } }; class test { public: void print(); }; int main(void) { t_matrix<test, 10, 10> matrix; matrix.print(); }Works like a charm...