5

我正在尝试在我的 c++ 应用程序中创建一个 Vector3D 类。对于我的整个程序,我使用的是命名空间。在这个命名空间中,我已经为它声明了我的 Vector3D 类和一个重载的 operator<<:

namespace space
{
    class Vector3D
    {
      public:
        float x, y, z;

        Vector3D(float _x = 0, float _y = 0, float _z = 0);
        Vector3D(const Vector3D & _vector);

        Vector3D & operator=(const Vector3D & _vector);
        Vector3D operator*(float _scalar);
        Vector3D operator*(const Vector3D & _vector); //CROSS PRODUCT

        float magnitude() const;
        float magnitude2() const; //FOR SPEED
        Vector3D normalize() const;
    };

    std::ostream & operator<<(std::ostream &, const Vector3D &);
}

它也编译得很好。我的问题是计算 Vector3D,我必须手动调用

space::operator<<(cout, vector);

这是一种痛苦。我想尽量避免“使用命名空间空间”,因为我喜欢“命名空间空间”中所有其他对象的前缀。

我的最后一个问题:有没有办法在不使用该命名空间的情况下调用命名空间内的重载运算符函数?

谢谢您的帮助。

4

1 回答 1

9

我的问题是要计算 Vector3D,我必须手动调用 space::operator<<(cout, vector);

你不知道,这就是 ADL(依赖于参数的名称查找,也称为 Koenig 的查找)的意义所在。应该够了

cout << vector;

如果它不起作用,要么你正在使用一个古老的编译器,要么你做错了什么。

于 2011-10-07T22:44:03.783 回答