Normalerweise setzen Sie die Vorlage Implementierung in der Template-Deklaration selbst:
template<class A, class B>
class H
{
public:
A a;
B b;
void fac()
{
// Implementation
}
};
jedoch it is also possible to separate it out:
template<class A, class B>
class H
{
public:
A a;
B b;
void fac();
};
template<class A, class B>
void H<A, B>::fac()
{
// Implementation
}
Diese beiden Schnipsel das Gleiche bedeuten. So funktioniert die C++ Syntax. Beachten Sie, dass sich der Bezeichner H
im ersten Code-Snippet nicht auf eine tatsächliche Klasse bezieht. Es bezieht sich auf eine Vorlagenklasse, die sich von einer normalen Klasse unterscheidet. H
ist der Bezeichner einer -Familie von Klassen, die ähnlich sind, aber unterschiedliche Vorlagenparameter verwenden. Deshalb müssen Sie H<A, B>
und nicht nur H
sagen.
Denken Sie darüber nach, wie es funktioniert in der Regel für Nicht-Template-Klassen:
class NonTemplateH
{
public:
int a;
short b;
void fac();
};
void NonTemplateH::fac()
{
// Implementation
}
Sie können sehen, wie sie ähnlich sind.
Damit dies funktioniert, müsste void fac() statisch sein. – fingerprint211b
Ich meine, warum kann ich nicht schreiben, H :: fac() {} anstelle von H . ?? – Determinant