Bei einer Vorlagenklasse wie der folgenden:
template<typename Type, typename IDType=typename Type::IDType>
class Mappings
{
public:
...
Type valueFor(const IDType& id) { // return value }
...
};
Wie kann jemand diese Klasse in einer Header-Datei weiterleiten?
c++
templates
forward-declaration
Tron Thomas
quelle
quelle
Sie können Standardargumente für eine Vorlage nur für die erste Deklaration der Vorlage deklarieren. Wenn Sie Benutzern erlauben möchten, eine Klassenvorlage weiterzuleiten, sollten Sie einen Weiterleitungsheader bereitstellen. Wenn Sie die Klassenvorlage eines anderen anhand der Standardeinstellungen weiterleiten möchten, haben Sie kein Glück!
quelle
Sie können eine Vorlagenklasse deklarieren, deren Definition die Standardargumente angibt. Jedes Mal, wenn Sie auf die Klasse verweisen, müssen Sie jedoch alle Argumente einschließen, bis die Definition eingeführt wird.
z.B. Lassen Sie uns verwenden,
std::vector
ohne es einzuschließen (das zweite Argument vonstd::vector
ist mit einem Standard definiert):Wir können es dann verwenden, ohne den Vektor einzuschließen, z.
Und wir können es verwenden mit
std::vector
zB:Ich habe überprüft nicht die Standards, aber das funktioniert auf
clang
/gcc
mit-std=c++98
bis zu-std=c++17
, so dass , wenn es nicht offiziell ein Standard ist , dann sieht es inoffiziell so sein.quelle
Foo<> foo;
.