Решено: Не применить модификатор const к функции (Которая модифицирует несущественные объекты класса.)

Модератор: Модераторы разделов

Аватара пользователя
Zeus
Сообщения: 694

Решено: Не применить модификатор const к функции

Сообщение Zeus »

Код: Выделить всё

class Name
{
public:
 const std::string& getName () const;
 void setName (const std::string&);

private:
 std::string name;
 RWlock rwl;
};

...

const std::string&
Name::getName () const
{
 Readlock (&rwl);
 return name;
};


Суть, думаю понятна. Пояснения необходимы только для RWlock: это класс, реализующий разделение многопоточного доступа по чтению-записи к какому-либо ресурсу.
Readlock - класс для exception-safe блокировки RWlock: в конструкторе "запирает на чтение" переданный ему указателем RWlock. В деструкторе - освобождает.
Так вот именно то, что в функции getName происходит работа с rwl - компилятор ругается на модификатор const у функции.
А это чисто "служебные" дела, не касающиеся собственно данных (name) про которые имеет ввиду модификатор const.
Если убрать модификатор, то вроде как вводишь в заблуждение прикладного программиста.
Как быть?

P.S.
Пока сделал так:

Код: Выделить всё

const std::string&
Name::getName () const
{
 Readlock (const_cast<RWlock*>(&rwl));
 return name;
};

Некрасиво снимать const, но пока это единственный рабочий вариант.
Спасибо сказали:
sergio
Сообщения: 436
Статус: Интересующийся новичок
ОС: Debian GNU/Linux 4 & 5

Re: Решено: Не применить модификатор const к функции

Сообщение sergio »

Zeus писал(а):
09.10.2007 18:29

Код: Выделить всё

class Name
{
private:
 std::string name;
 RWlock rwl;
};



Код: Выделить всё

 mutable RWlock rwl;

ы?
Debian GNU/Linux 4 -- AMD Athlon64 3000+ / Asus 7600GS -- Gnome
Debian GNU/Linux 5 -- Dell (Vostro) 500 (Celeron M560 / iGM965) -- Gnome
Спасибо сказали:
v04bvs
Сообщения: 636
ОС: Debian GNU/Linux

Re: Решено: Не применить модификатор const к функции

Сообщение v04bvs »

Спасибо сказали:
Аватара пользователя
Zeus
Сообщения: 694

Re: Решено: Не применить модификатор const к функции

Сообщение Zeus »

эхе-е....
Похоже то, что нужно.
Спасибо, попробую!
Спасибо сказали: