2

const クラスのメソッドからnon-const要素への参照を返す方法を理解するのに苦労しています。std::vector私がしようとしていることの簡単な例は、

template<class T>
class MyClass
{
 public:
 MyClass : myVec(3)
 {
 }

 T& x() const
 {
    return *(myVec.data())[0]
 }

 std::vector<T> myVec;
}

私が目指している行動は、次のようなことができるようになりたいということです。

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)

Eigenは同じタイプの動作を提供しますが、それを機能させる方法を理解できませんでした。

4

2 に答える 2

11

を使用することができconst_cast、ここで作業を行います (投稿された使用法によると)。ただし、この場合 (およびほとんどの場合) には必要ありません。

非 const メンバー関数のオーバーロードを追加することができます (また追加する必要があります)。次に、constメンバー関数はconstへの参照を返し、非constメンバー関数は非constへの参照を返します。適切なものは、オーバーロードの解決によって呼び出されます。

const T& x() const
{
   return myVec[0];
}
T& x()
{
   return myVec[0];
}
于 2016-08-05T13:27:09.710 に答える