У меня есть структура, содержащая ссылку в ней
template <class T>
struct RefContainer {
RefContainer(T& t) : _r(t) {}
T& getRef() {
return _r;
}
private:
T& _r;
};
Теперь другой объект, который неизменен, использует эту структуру внутри себя и имеет в себе этот объект следующим образом:
RefContainer<char> _c;
Когда я использую этот неизменяемый объект для преобразования самого себя с помощью точки, я получаю ссылку на константу. Поскольку я вызываю getRef объекта RefContainer внутри неизменяемых объектов, компилятор говорит, что я нарушаю корректность константы.
Сам RefContainer должен содержать неконстантную ссылку lvalue, но я бы хотел связать вызовы неизменяемого объекта для создания новых, например:
ImmubableObject obj;
auto newObj = obj.copyWithSomeAttributes().modifyWithThisString("str");
// I'm on C++11 btw, so I can use everything C++11 has to offer
Как мне сделать это «правильным» способом (возможно, избегая уродливых константных приведений)?
const
или перегрузите, если нужно иметь такое же имя (const T& getConstRef() const { return _r }
) и используйте это в случаях, когда вы не хотите менятьreturned T&
- person NetVipeC   schedule 16.09.2014ImmubableObject
неизменен? Означает ли это, что это определение типа для какого-тоconst T
? - person Shoe   schedule 16.09.2014ImmumableObject
действительно должен быть неизменным, он должен бытьImmumableObject const obj;
(возможно, с некоторыми аргументами конструктора) - person M.M   schedule 16.09.2014