命名空间+重载std :: ostream<<操作者

时间:2011-10-07 22:41:02

标签: 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 &);
}

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

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

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

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:9)

  

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

你没有,那就是ADL(依赖于参数的名称查找,也称为Koenig的查找)。它应该足够了

cout << vector;

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