Boost logo

Boost :

From: Andrei Alexandrescu (andrewalex_at_[hidden])
Date: 2002-06-26 19:50:57


"Douglas Gregor" <gregod_at_[hidden]> wrote in message
news:200206252151.21098.gregod_at_cs.rpi.edu...
[snip]

An idea just occured to me. Storing the pseudo-vtable as an integral index
instead of a pointer to a table of functions has a nice fringe benefit:
given a Variant object, we can easily and efficiently retrieve its index in
the typelist. This in turn would help implementing switch-on-type
efficiently in both library and client code, something like:

typedef Variant<TYPELIST_3(int, double, string)> Field;
Field fld;
switch (fld.TypeIndex())
{
case Field::tag<int>::result:
    // it's an int!
    break;
case Field::tag<double>::result:
    // it's a double!
    break;
case Field::tag<string>::result:
    // it's a string!
    break;
default:
    // it's a boy!
}

Of course, you can just as well use 0, 1, 2, instead of
Field::tag<xxx>::result, but the formulation above is more resilient in face
of changing the typedef.

So I guess this would be the second useful change to Variant.

Andrei the mischievous one


Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk