Boost logo

Boost Users :

From: Piyush Kapadia (piyush.kapadia_at_[hidden])
Date: 2005-10-09 20:41:11


Let's say if using -
std::map<string, boost::any> tmap;

Now you can put anything in tmap, which could be primitive types or vector
or another map.

Then you want to implement

ostream& operator << (ostream& os, const tmap& _map)
{
        // Over here we need to identify -
        // if iterator->second is primitive type, vector, map or unknown
type.
        // Depending up on that we can decide if we need to iterate through
        // another vector or simply use << for primitive type.
        // That's why is_primitive or other type_traits functions may help.

        // Ideally we need switch statement like following
        switch(type(_map)) {
                case int :
                case double :
                case long :
                        return os<< _map;
                case vector :
                {// interate through vector here. }
                ..
                .. // and so on.

        }

}

-----Original Message-----
From: boost-users-bounces_at_[hidden]
[mailto:boost-users-bounces_at_[hidden]] On Behalf Of Christian Henning
Sent: Saturday, October 08, 2005 6:10 PM
To: boost-users_at_[hidden]
Subject: Re: [Boost-users] boost::any Question

I'm not sure why you would want to use traits here. I think traits are
used for compile-time if...else tests on types.

Why not use a static numerical member in classes that you put in your
map and so you could use a switch statement to figure out what type
you are using?

There are probably better ways to do that. RTTI ain't!

Christian

On 10/7/05, Piyush Kapadia <piyush.kapadia_at_[hidden]> wrote:
>
>
>
> I am new user of Boost, I tried to use boost::variant first, but in
> comparison to boost::any performance of boost::variant appears to be
around
> 4 times slower, so settled for boost::any.
>
>
>
> Also boost::any has cleaner interface but I don't know how to query
current
> type information for boost::any ?
>
>
>
> My code looks like following
>
>
>
> map<unsigned int, boost::any> result_table;
>
>
>
> result_table[1] = 543.434;
>
> vector<int> vec;
>
> .. Some vec population code;
>
> result_table[2] = vec;
>
>
>
> Now I need to develop a stringify function for result_table;
>
>
>
> I can fetch the results back as
>
> boost::any value = result_table[2];
>
>
>
> But I need to know the type of value, so that I can treat it accordingly
to
> stringify;
>
> I know there exists type_traits, but very limited examples of type_traits
is
> provided on Boost documentation and particularly, I am clueless about how
to
> use type_traits in above context to find out what is the current type
> returned by result_table[int]
>
>
>
> Also I want to know if Boost has any Hash map implementation that can be
> superior in performance compare to regular std::map ??
>
>
>
> Thanks,
>
>
>
>
>
> Piyush
> _______________________________________________
> Boost-users mailing list
> Boost-users_at_[hidden]
> http://lists.boost.org/mailman/listinfo.cgi/boost-users
>
>

_______________________________________________
Boost-users mailing list
Boost-users_at_[hidden]
http://lists.boost.org/mailman/listinfo.cgi/boost-users


Boost-users list run by williamkempf at hotmail.com, kalb at libertysoft.com, bjorn.karlsson at readsoft.com, gregod at cs.rpi.edu, wekempf at cox.net