Я читал о списках в "Современном дизайне С++", и я понял это как своего рода объединение для типов. Помещая различные, не связанные типы в списке типов, можно использовать его для представления более одного типа сразу, без наследования. Я тестировал typelist в некоторых простых функциях с примитивными типами, но я не мог заставить их работать.
Может ли кто-нибудь сказать мне, верно ли мое несоответствие списков типов и дать простой пример реального мира, как использовать списки типов в среднем дневном коде? Спасибо заранее.
Btw, я использую Windows и Visual Studio 2005 и его компилятор.
EDIT: мои примеры ушли, я использую проект sandbox для тестирования этих вещей. Но это было тихо похоже на код в учебнике 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";
}