我很难弄清楚如何从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)
我所追求的行为是,我希望能够做到以下事情,
new
Eigen提供相同类型的行为,但我无法弄清楚如何让它发挥作用。
答案 0 :(得分:10)
您可以使用const_cast
,并在此处完成工作(根据发布的使用情况)。但是在这种情况下你并不需要它(在大多数情况下)。
你可以(而且应该)为它添加非const成员函数重载。然后const成员函数返回对const的引用,非const成员函数返回对非const的引用。相应的一个将通过overload resolution调用。
const T& x() const
{
return myVec[0];
}
T& x()
{
return myVec[0];
}
答案 1 :(得分:2)
标准库容器将容器的常量扩展为值本身。由于您的类在x()
中是常量,因此向量也是如此。您可以使用const_cast从访问者中的项目中删除const
。
return const_cast <T&> (*(myVec.data())[0]);
一般来说,这被认为是不好的做法,因为const
可以保护你。绕过这些保护可能会使代码难以推理。