|
Boost Users : |
From: Ovanes Markarian (om_boost_at_[hidden])
Date: 2007-04-23 14:08:31
On Mon, April 23, 2007 19:34, Joaquín Mª López Muñoz wrote:
>
> I don't know what the problem is but it looks like there's more to it
> than you described. Please see the attached compilable snippet mimicking
> your scenario: it works OK for GCC 3.2, and it uses the string const&
> version of create_type(). Do you observe otherwise? When you say that
> the former fails: do you mean you get a compiler error? If so, what's
> it like?
Well, what I mean is the following sample:
#include <boost/array.hpp>
#include <boost/multi_index_container.hpp>
#include <boost/multi_index/hashed_index.hpp>
#include <boost/multi_index/member.hpp>
#include <utility>
#include <string>
#include <iostream>
namespace mi=boost::multi_index;
typedef int some_type;
typedef std::pair<std::string, some_type const*> key_value_pair;
//actually this is a predefined type
boost::array<key_value_pair, 5> predefined_types =
{
key_value_pair("test1", NULL)
, key_value_pair("test2", NULL)
, key_value_pair("test3", NULL)
, key_value_pair("test4", NULL)
, key_value_pair("test5", NULL)
};
struct hash{}; //tag used to retrieve values
typedef mi::multi_index_container
<
key_value_pair,
mi::indexed_by
<
mi::hashed_unique
<
mi::tag<hash>,
BOOST_MULTI_INDEX_MEMBER(key_value_pair, std::string, first)
>
>
> types_map;
types_map types_(predefined_types.begin(), predefined_types.end());
inline void create_type(std::string const& name)
{
types_.insert(std::make_pair<std::string, some_type const*>(name, NULL));
}
inline bool has_type(std::string const& name)
{
types_map::index<hash>::type::const_iterator i=types_.get<hash>().find(name), end =
types_.get<hash>().end();
return i!=end;
}
int main()
{
//std::string s("hello");
//create_type(s);
std::string s2("test3");
std::cout << "multi_index instance contains string \""+s2+"\": " << (has_type(s2)?"yes":"no");
}
But in a clean environment it works fine and 'has_type' finds the string. May be I have some
globally available identifier, which returns the wrong string, and therefore fails... I will
double check it and get back to this post if I identify smth. Many thanks for your great support!
With Kind Regards,
Ovanes Markarian
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