Const方法返回向量元素的非const引用

jla*_*ack 2 c++ const reference vector const-method

我很难弄清楚如何从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;
}
Run Code Online (Sandbox Code Playgroud)

我想要的行为是,我希望能够做到以下几点,

MyClass obj<double>;
obj.x() = 3.3;
assert(obj.x()==3.3)
Run Code Online (Sandbox Code Playgroud)

Eigen给出了相同类型的行为,但我无法弄清楚如何让它工作.

son*_*yao 10

你可以使用const_cast,它会在这里完成工作,(根据发布的用法).但在这种情况下你不需要它(对大多数情况而言).

您可以(并且应该)为它添加非const成员函数重载.然后const成员函数返回对const的引用,非const成员函数返回对非const的引用.将通过重载解析调用适当的一个.

const T& x() const
{
   return myVec[0];
}
T& x()
{
   return myVec[0];
}
Run Code Online (Sandbox Code Playgroud)