我已经为2D vector (和标量)重载了operator-
(和-=
):
Vector2D Vector2D::operator-(const Vector2D& rhs) {
return Vector2D(this->GetX() - rhs.GetX(), this->GetY() - rhs.GetY());
}
为了使此调用不抱怨
no operator '-' matches these arguments
,我必须这样做:a2de::Vector2D Vector2D::GetFacingVector(const Vector2D& target, const Vector2D& source) {
a2de::Vector2D facingVec(const_cast<Vector2D&>(target) - const_cast<Vector2D&>(source));
return facingVec;
}
或这个:
a2de::Vector2D Vector2D::GetFacingVector(const Vector2D& target, const Vector2D& source) {
a2de::Vector2D facingVec(Vector2D(target) - Vector2D(source));
return facingVec;
}
两者似乎都是一件非常糟糕的事情。 (不要使用短语“仅当知道您在做什么时才使用
const_cast
,因为编译器会假设您在做!”)这些是正确的还是有更好的方法完成同一件事?
最佳答案
您的运算符(operator)应为:
Vector2D Vector2D::operator-(const Vector2D& rhs) const
注意 const 。
关于c++ - C++使用两个const参数调用非const运算符重载,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11894582/