我在“现代 C++ 设计”中阅读了类型列表,并将其理解为某种类型的联合。通过将不同的、不相关的类型放入类型列表中,可以使用它一次表示多个类型,而无需继承。我在一些具有原始类型的简单函数中测试了 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";
}