Ich habe eine harte Zeit herausfinden, wie man eine non-const
Referenz auf ein Element in einer std::vector
von einer Const-Klasse-Methode zurückgibt. Ein einfaches Beispiel, was ich werde ist,Const-Methode liefert nicht-const Referenz auf Vektorelement
template<class T>
class MyClass
{
public:
MyClass : myVec(3)
{
}
T& x() const
{
return *(myVec.data())[0]
}
std::vector<T> myVec;
}
Das Verhalten, das ich für gehe, ist, dass ich die Dinge in der Lage sein möchten, dass zu tun, wie die folgenden,
MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)
Eigen gibt die gleiche Art von Verhalten, aber ich konnte nicht herausfinden, wie man es zur Arbeit bringt.
@jlack Es ist nicht klar, warum Sie versuchen, einen nicht konstanten Verweis auf ein konstantes Objekt zurückzugeben. –
Warum ist 'x' const? Wenn Sie einen mutierenden Accessor haben, sollte es nicht const sein. – NathanOliver
Es ist fraglich, ob die Elemente in einem Container konstant sein sollten, nur weil der Container ist. Wenn ich einen konstanten Container mit nicht konstanten Zeigern habe, ist das dann grundlegend anders? Sie könnten die Const-Ness nur für die Elemente anzeigen, die vorhanden sind, und nicht für deren Wert. – nate