Кажется, что можно сделать красивее, но понять не могу. Ниже написан класс, который содержит метод find. Если мы работаем с объектом по const-ссылке или указателю, то метод должн возвращать const указатель. Если объект не const, то соответственно метод должен возвращать не const указатель, что бы мы потом могли изменить значение.
Мне очень не нравятся последние 3 строки.
void test1(const MyClass& a) { const Item* a = a.find(12); } void test2(MyClass& a) { Item* v = a.find(12); *v = 13; } class MyClass { public: Item* find(const Item& t) { for(auto i=begin(), e=end(); i!=e; i++) if(*i==t) return i; return 0; } const Item* find(const Item& t) const { return const_cast<MyClass*>(this)->find(t); } };
Мне очень не нравятся последние 3 строки.