命名空间+重载std :: ostream <<运算符

low*_*owq 5 c++ namespaces operator-overloading ostream

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

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 &);
}
Run Code Online (Sandbox Code Playgroud)

它编译得很好.我的问题是cout一个Vector3D,我必须手动调用

space::operator<<(cout, vector);
Run Code Online (Sandbox Code Playgroud)

这是一种痛苦.我想尝试避免"使用命名空间空间;",因为我喜欢"命名空间空间"中所有其余对象的前缀.

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

谢谢您的帮助.

K-b*_*llo 9

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

你不这样做,这就是ADL(依赖于参数的名称查找,也称为Koenig的查找).它应该足够了

cout << vector;
Run Code Online (Sandbox Code Playgroud)

如果它不起作用,你要么使用古老的编译器,要么你正在做其他错误的事情.