James Kanze
11/11/2008 1:21:00 PM
On Nov 10, 3:26 pm, "Christian Meier" <chris@no_spam.com> wrote:
> I have a question about the find function of std::set.
> When I have a "std::set<int*>", why can't I call the find()
> function with an "const int*"? I know that my key type is
> different from the type of the parameter I give to the find
> function but can't the find() function be written in a way
> where this would work? Normally, "int*" can be compared with
> "const int*" without problems...
The problem is that std::set<>::find() takes the key by
reference, and a reference to an int* cannot be initialized with
an int const*&. (If you could, then you could modify a const
object without a const cast.)
> And as a follow-up question: What would you do in a function
> like this:
> void MyClass::myFunc(const LargeObject* input)
> {
> // ...
> // m_LargeObjectSet is a member variable of the class MyClass and has
> the type "std::set<LargeObject*>". How would you write the following line?
> const_const? Copy the large object?
> // m_LargeObjectSet.find(input);
> // ...
> }
> The function already exists and I would have to rewrite quite
> a lot of code when I would remove the "const" of the parameter
> type. Do you have any suggestions?
The real question is what your std::set should really contain.
Perhaps it would be more appropriate for it to contain MyType
const*, rather than just MyType*. Not knowing what the role of
the set is, I can't say. Most of the time, if the set contains
pointers, you want to specialize the comparison to be based on
the pointed to object. In which case, the pointer had better be
to const.
--
James Kanze (GABI Software) email:james.kanze@gmail.com
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 place Sémard, 78210 St.-Cyr-l'École, France, +33 (0)1 30 23 00 34