Я читал о списках типов в «Современном дизайне C++» и понял, что это своего рода объединение типов. Помещая разные, несвязанные типы в список типов, можно использовать его для одновременного представления более одного типа без наследования. Я протестировал список типов в некоторых простых функциях с примитивными типами, но не смог заставить ни одну из них работать.
Может ли кто-нибудь сказать мне, правильно ли я понимаю списки типов, и привести простой пример из реальной жизни, как использовать списки типов в обычном повседневном коде? Заранее спасибо.
Кстати, я использую Windows и Visual Studio 2005 и его компилятор.
РЕДАКТИРОВАТЬ: мои примеры исчезли, я использую проект песочницы в vs для проверки этих вещей. Но это было похоже на код в учебнике Доббса:
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";
}