Objekt einer Template Klasse als Methodenparameter.



  • Hallo,

    ich habe eine generische Klasse "CBA_DataType_Matrix" geschrieben. (Unvollständig)
    Viele Methoden hab ich hier in der Darstellung hier ausgelassen, damit es übersichtlich bleibt.

    Die Kompilierung klappt nur, wenn ich an die isBigger Methode ein Objekt bekommt, was exakt die selben Parameter hat wie das Object aus dem die Methode ausgeführt wird. Ich möchte aber, dass das Object übergeben wird, egal welche Parameterwerte es hat, solange es nur vom Typ CBA_DataType_Matrix ist.
    Könnt ihr mir da helfen?

    template <class T,int DIM_N, int DIM_M>
    class CBA_DataType_Matrix : CBA_DataType_Abstract
    {
    (...)
    
    public:
    	bool isBigger(CBA_DataType_Matrix p_mtrx)
    	{
    		try
    		{
    			if(det() < p_mtrx.det())
    			{
    				return true;
    			}
    			return false;
    		}
    		catch(char const* e)
    		{
    			return false;
    		}
    	}
    (...)
    };
    


  • du meinst

    template <class T2, int DIM_N2, int DIM_M2>
    bool isBigger(CBA_DataType_Matrix<T2, DIM_N2, DIM_M2> p_mtrx)
    {
    
    }
    

    !?!

    Edit: immer diese Tippfehlerchen...



  • Ah sehr schön 🙂 Vielen dank 😃

    Wenn ich jetzt noch ein Objekt der Klasse CBA_DataType_Matrix zurückgeben möchte aus der Methode? Wie muss ich dann die Template Parameter definieren?

    Kann ich dann einfach sagen... bspw:

    CBA_DataType_Matrix multiplyHadamar(CBA_DataType_Matrix <P_T, P_DIM_N, P_DIM_M> p_mtrx)
    {
        return dingsBumsObjectVomTypCBA_DataType_Matrix;
    }
    


  • Cappex schrieb:

    Ich möchte aber, dass das Object übergeben wird, egal welche Parameterwerte es hat, solange es nur vom Typ CBA_DataType_Matrix ist.

    CBA_DataType_Matrix ist weder ein Typ noch eine Klasse. Es handelt sich hier um ein Klassen-Template, also eine Vorlage einer Klasse. Ein konkreter Typ ergibt sich, indem du die Template-Argumente einsetzt.

    Cappex schrieb:

    Kann ich dann einfach sagen... bspw:

    CBA_DataType_Matrix multiplyHadamar(CBA_DataType_Matrix <P_T, P_DIM_N, P_DIM_M> p_mtrx)
    {
        return dingsBumsObjectVomTypCBA_DataType_Matrix;
    }
    

    Nein, du musst einen vollständigen Typ zurückgeben, also inklusive Template-Argumente. Überlege dir also, welche Angaben für den zurückgegebenen Typ sinnvoll sind.


Log in to reply