我的结构中包含引用
template <class T>
struct RefContainer {
RefContainer(T& t) : _r(t) {}
T& getRef() {
return _r;
}
private:
T& _r;
};
现在,另一个不可变的对象在其自身内部使用此结构,并且在其中包含此对象:
RefContainer<char> _c;
当我使用那个不可变对象用点转换自己时,我得到一个const引用。因为我在不可变对象编译器中调用了RefContainer对象的getRef,所以我违反了const的正确性。
RefContainer本身必须保存非常量左值引用,但我喜欢在不可变对象上链接调用以创建新的如下:
ImmubableObject obj;
auto newObj = obj.copyWithSomeAttributes().modifyWithThisString("str");
// I'm on C++11 btw, so I can use everything C++11 has to offer
我如何解决这个问题&#34;对&#34;方式(可能避免丑陋的const演员)?
答案 0 :(得分:0)
你应该尝试这样的事情:
template <class T>
struct RefContainer {
RefContainer(T& t) : _r(t) {}
T& getRef() const {
// ^^^^^
return _r;
}
private:
T& _r;
};
这样,T&
引用可以用作非const,无论RefContainer
实例是否为const
对象。