2

我很难弄清楚如何从 const 类方法返回对 anon-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的引用,non-const成员函数返回对non-const的引用。适当的将通过重载决议调用。

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

标准库容器将容器的 const-ness 扩展到值本身。由于您的类在 中是常量x(),因此向量也是如此。您可以使用const_castconst从访问器中的项目中删除。

return const_cast <T&> (*(myVec.data())[0]);

一般来说,这被认为是不好的做法,因为const它可以保护您。绕过这些保护措施会使代码更难推理。

于 2016-08-05T14:35:18.080 回答