Код: Выделить всё
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, но пока это единственный рабочий вариант.