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...


Anmelden zum Antworten