
Hi everybody, I have this boost::multi_index container (I'm very very happy with boost::multi_index!): typedef multi_index_container< CacheEntry, indexed_by < ordered_unique< composite_key< CacheEntry, member<CacheEntry,string,&CacheEntry::d_qname>, member<CacheEntry,uint16_t,&CacheEntry::d_qtype> >, composite_key_compare<CIStringCompare, std::less<uint16_t> > >, sequenced<> >
cache_t;
For details on CacheEntry, see http://wiki.powerdns.com/cgi-bin/trac.fcgi/browser/trunk/pdns/pdns/recursor_... What I want to do is use a compatible key ('char *') to search only on d_qname. I've tried: struct string_char_comp { bool operator()(const char* x, const tuple<string,uint16_t>& )const { return false; // bogus, just compile testing } bool operator()(const tuple<string,uint16_t>&, const char* x )const { return false; } }; Followed by: cache_t d_cache; // ... d_cachecache=d_cache.equal_range(qname.c_str(), string_char_comp()); But this doesn't compile with famously huge template errors (I've shortened boost::multi_index to bi::): ord_index_ops.hpp:87: error: no match for call to `(const string_char_comp) (bi::composite_key_result<bi::composite_key<MemRecursorCache::CacheEntry, bi::member<MemRecursorCache::CacheEntry, std::basic_string<char, std::char_traits<char>, std::allocator<char> >, &MemRecursorCache::CacheEntry::d_qname>, bi::member<MemRecursorCache::CacheEntry, short unsigned int, &MemRecursorCache::CacheEntry::d_qtype>, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type, boost::tuples::null_type> >, const char* const&)' These errors make me wonder if what I want is even possible - unless I make my comparison function accept a composite_key_result with lots of bi internals in it. Joaquin? -- http://www.PowerDNS.com Open source, database driven DNS Software http://netherlabs.nl Open and Closed source services