Ich habe über Typlisten in 'Modern C++ Design' gelesen und ich habe es als eine Art von Union für Typen verstanden. Wenn Sie verschiedene, nicht verwandte Typen in eine Typenliste einfügen, können Sie damit mehr als einen Typ auf einmal ohne Vererbung darstellen. Ich habe die Typenliste in einigen einfachen Funktionen mit primitiven Typen getestet, aber ich konnte keine von ihnen zum Arbeiten bekommen.Wie man Typlisten verwendet
Kann mir jemand sagen, ob mein Verständnis von Typlisten richtig ist und geben Sie ein einfaches Beispiel aus der realen Welt, wie man Typelisten im täglichen Durchschnittscode verwendet? Danke im Voraus.
Btw, ich benutze Windows und Visual Studio 2005 und seinen Compiler.
EDIT: Meine Beispiele sind weg, ich benutze ein Sandbox-Projekt in vs, um diese Dinge zu testen. Aber es war ruhig ähnlich in Dobbs Tutorial-Code:
void SomeOperation(DocumentItem* p)
{
if (TextArea* pTextArea = dynamic_cast<TextArea*>(p))
{
... operate on a TextArea object ...
}
else if (VectorGraphics* pVectorGraphics =
dynamic_cast<VectorGraphics*>(p))
{
... operate on a VectorGraphics object ...
}
else if (Bitmap* pBitmap = dynamic_cast<Bitmap*>(p))
{
... operate on a Bitmap object ...
}
else
{
throw "Unknown type passed";
}
}
Das funktioniert aber ich habe nicht den Vorteil der Vererbung sehen, die das gleiche tun kann. Und dynamischer Cast funktioniert nicht für primitive Typen. Ist es möglich, sie als Rückgabewert zu verwenden wie:
typedef Typelist<int, string> mylist
mylist myfunction() {
if(foo == bar)
return 5;
return "five";
}
Fügen Sie ein Beispiel für den Code hinzu, der für Ihre Frage nicht funktioniert hat. –