「Modern C++ Design」で型リストについて読み、それが型のある種の共用体であると理解しました。関連性のない異なる型を型リストに入れることで、それを使用して、継承なしで一度に複数の型を表すことができます。プリミティブ型を持ついくつかの単純な関数で typelist をテストしましたが、どれも機能しませんでした。
私のタイプリストの理解が正しいかどうか、そして毎日の平均的なコードでタイプリストを使用する方法の簡単な現実世界の例を誰かに教えてもらえますか? 前もって感謝します。
ところで、私は Windows と Visual Studio 2005 とそのコンパイラを使用しています。
編集:私の例はなくなりました.vsでサンドボックスプロジェクトを使用してそれらをテストします. しかし、Dobbs チュートリアルのコードと同様に静かでした。
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";
}
}
これは機能しますが、同じことができる継承よりも利点がありません。また、動的キャストはプリミティブ型では機能しません。次のような戻り値として使用することは可能ですか?
typedef Typelist<int, string> mylist
mylist myfunction() {
if(foo == bar)
return 5;
return "five";
}