簡體   English   中英

命名空間+重載std :: ostream <<運算符

[英]Namespace + overloaded std::ostream << operator

我正在嘗試在我的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);

這是一種痛苦。 我想嘗試避免“使用命名空間空間;”,因為我喜歡“命名空間空間”中所有其余對象的前綴。

我的最后一個問題:有沒有辦法在不使用該命名空間的情況下在命名空間內調用重載的操作符函數?

謝謝您的幫助。

我的問題是cout一個Vector3D,我必須手動調用space :: operator <<(cout,vector);

你不這樣做,這就是ADL(依賴於參數的名稱查找,也稱為Koenig的查找)。 它應該足夠了

cout << vector;

如果它不起作用,你要么使用古老的編譯器,要么你正在做其他錯誤的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM