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

Namespace + overloaded std::ostream << operator

本文关键字:lt 运算符 重载 std ostream 命名空间      更新时间:2023-10-16

我试图在我的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 &);
}

它也可以很好地编译。我的问题是计算一个Vector3D,我必须手动调用

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

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

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

谢谢你的帮助

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

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

cout << vector;

如果它不工作,要么你使用的是一个古老的编译器,要么你做错了什么