Boost logo

Boost :

From: Alexander Nasonov (alnsn-boost_at_[hidden])
Date: 2002-04-08 02:22:08

I implemented the dynany class. I haven't the documentation yet but I can explain its
purpose in few words.
This class is like boost::any. In addition to boost::any functionality it provides
dynamic cast to types specified in its first template parameter. Example:

struct X {};
struct Y : X {};

// dynanyXY can hold any ValueType and cast dynamically to X and Y:
typedef dynany<TYPELIST_2(X, Y)> dynanyXY;

int main()
    dynanyXY a = 137;
    int i = dynany_cast<int>(a);
    assert(i == 137);
    a = Y();
    const X & x = dynany_cast<const X &>(a); // cast Y to X
    Y * py = dynany_cast<Y *>(&a);
    assert(py == &x);
  catch(const bad_dynany_cast &)

The dynany class has also Visitor template parameter. You can use accept dynany
member if you specified this parameter:

struct Visitor
  void visit(int);
  void visit(char);

typedef dynany<Loki::NullType, Visitor> visited_dynany;

int main()
  Visitor v;
  visited_dynany a = 137;
  a.accept(v); // v.visit(137) is called
  a = '0';
  a.accept(v); // v.visit('0') is called

Source is here:*checkout*/cpp-experiment/cpp-experime
To compile you need Loki library and of course boot library.
Any interest?
Alexander Nasonov

Boost list run by bdawes at, gregod at, cpdaniel at, john at