Boost logo

Boost Users :

Subject: [Boost-users] What concepts/interface must the element type of multi_index_container<> support?
From: Chris Cleeland (chris.cleeland_at_[hidden])
Date: 2011-09-16 13:15:33


I'm trying to use boost::multi_index_container on a type that I've
defined. I want the container to have two indices:

1. insertion order
2. hashed_unique

Further, I want the hash to use an sha1 hash value, which I have
represented as a struct. So, I have something like the following:

struct sha1_hash_value { ... };

class MyRecord {
public:
  ...
  sha1_hash_value hash() const { return _sha1_hash; }
  ...
private:
  sha1_hash_value _sha1_hash;
};

using namespace boost::multi_index;

typedef boost::multi_index_container<
  MyRecord,
  indexed_by<
    sequenced<>,
    hashed_unique<const_mem_fun<MyRecord,sha1_hash_value,&MyRecord::hash> >
>
> RecordSet;

When I compile this, I get lots of complaints regarding the
conversions to/from the 'sha1_hash_value' type. I understand that I
need to define appropriate member functions or specializations for
this type. What I would like to know is what those member
functions/specializations are and where that is documented so that I
don't have to decipher compiler error gibberish iteratively and just
cross my fingers that the errors are really about missing
functionality and not about misuse.

FWIW, if I change sha1_hash_value to a 'long', the code compiles, so
it doesn't appear as if I'm completely misusing
multi_index_container<>, though I'm certainly still open to that
possibility as well.

Thanks for any help. The brick wall I'm banging my head against is
really starting to hurt.


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