У меня есть класс, в котором получение определенного члена по ссылке включает в себя лог c, поэтому я создал для него частную функцию получения, которая прекрасно работает внутри.
Я также хотел бы предоставить публичные c доступ к той же ссылке, но с постоянным модификатором. Поскольку функция publi c не должна изменять состояние класса, она объявляется с ключевым словом const. Однако внутренний лог c, так как он обеспечивает ссылку на внутренний элемент, не должен объявляться как const.
Как я могу использовать один и тот же лог c для получения ссылки и предоставить ей как постоянную, так и неконстантную точку доступа?
Есть ли здесь шаблон, который мне не хватает?
Ниже я собрал небольшой пример для демонстрации:
class my_class{
public:
const int& get_my_field() const{
return get_my_field_ref(); //g++: error: error - passing 'const my_class' as 'this' argument discards qualifiers [-fpermissive]
}
private:
int field;
int& get_my_field_ref(){ //g++: warning: note - in call to 'int& my_class::get_my_field_ref()'
/* ..complex logic to get reference.. */
return field;
}
};