gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:12:38 24 4
gpt4 key购买 nike

我正在尝试在我的 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);

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

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

感谢您的帮助。

最佳答案

My problem is to cout a Vector3D, I have to manually call space::operator<<(cout, vector);

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

cout << vector;

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

关于c++ - 命名空间 + 重载 std::ostream << 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7693533/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com