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