Template -> inline?



  • Jo folgende Frage: wenn ich meine Klassenmethoden bei einem Template außerhalb der Klasse, aber halt wie gewohnt in der Headerdatei definiere, werden die dann noch vom Compiler automatisch als inline angesehen? Was sagt da der Standard?

    MfG Pellaeon

    template <class T>
    	struct CAEMatrix44
    	{
    		//erstellt Matrix uninitialisiert
    		CAEMatrix44() {}
    		//erstellte Matrix wird mit value gefüllt
    		CAEMatrix44(const T& value);
    
    		//setzt die Einheitssmatrix
    		void identity();
    		...
        }
    
        //
    	template <class T>
    	void CAEMatrix44<T>::identity()  // <- inline oder nicht?
    	{
    		memset(m_values,0,sizeof(m_values));
    		m_11 = m_22 = m_33 = m_44 = 1;
    	}
    


  • Wenn du in einem Klassentemplate eine Funktion inline machen möchtest, musst du entweder die Funktionsdefinition in die Klassendefinition schreiben oder ein inline vor die Funktionsdeklaration setzen. Also ist identify() in deinem Beispiel keine inline-Funktion.


  • Mod

    Michael E. schrieb:

    Wenn du in einem Klassentemplate eine Funktion inline machen möchtest, musst du entweder die Funktionsdefinition in die Klassendefinition schreiben oder ein inline vor die Funktionsdeklaration setzen. Also ist identify() in deinem Beispiel keine inline-Funktion.

    tatsächlich ist identity hier überhaupt keine funktion, sondern ein template. eine inline-spezifikation, um die verletzung der ODR zu verhindern, ist folglich unnötig.



  • camper schrieb:

    Michael E. schrieb:

    Wenn du in einem Klassentemplate eine Funktion inline machen möchtest, musst du entweder die Funktionsdefinition in die Klassendefinition schreiben oder ein inline vor die Funktionsdeklaration setzen. Also ist identify() in deinem Beispiel keine inline-Funktion.

    tatsächlich ist identity hier überhaupt keine funktion, sondern ein template.

    Eine Funktion eines Klassentemplates 😉

    eine inline-spezifikation, um die verletzung der ODR zu verhindern, ist folglich unnötig.

    Inline-Spezifikationen sind auch nicht nur dafür da, um die ODR einzuhalten. Bei einer so kurzen Funktion wie identity ist es sinnvoll, sie inline zu machen, um dem Compiler zu empfehlen, Funktionsaufrufe durch den Funktionskörper zu ersetzen.



  • camper schrieb:

    eine inline-spezifikation, um die verletzung der ODR zu verhindern, ist folglich unnötig.

    Stimmt zwar, hat aber nichts mit dem Thema zu tun. 🙂



  • camper schrieb:

    tatsächlich ist identity hier überhaupt keine funktion, sondern ein template. eine inline-spezifikation, um die verletzung der ODR zu verhindern, ist folglich unnötig.

    Was meinst du damit? ODR?




Anmelden zum Antworten