gpt4 book ai didi

可以采用整数或 float 或 double 或任何其他可转换为 float 的 C++ 函数

转载 作者:行者123 更新时间:2023-12-01 14:47:15 27 4
gpt4 key购买 nike

我正在尝试在 C++ 中实现 Vector3 结构。我正在重载“*”运算符以处理与标量值的乘法。所以它会像这样工作:

v1 = Vector3(1.0f, 1.0f, 1.0f);
v2 = 2*v1;
v3 = 2.4f*v1;
v4 = 2.4*v1;
所有 3 个操作都将返回一个 Vector3 实例。但是,我不想为此目的实现 3 个功能。
    Vector3 operator * (int& const val) {
float _val = static_cast<float> (val);
return Vector3(x * _val, y * _val, z * _val);
}

Vector3 operator * (double& const val) {
float _val = static_cast<float> (val);
return Vector3(x * _val, y * _val, z * _val);
}

Vector3 operator * (float& const val) {
return Vector3(x * val, y * val, z * val);
}

有没有更好的方法用一个函数来做到这一点?

最佳答案

由于您将所有类型转换为 float再次,你不需要那个。
如果您将函数定义为接受 float ,然后通过 int或任何可转换的类型,它将被转换为 float自动地。下面的代码表明

#include <typeinfo>
#include <iostream>

struct Vector3
{
Vector3(float x, float y, float z): x{x}, y{y}, z{z}{}
float x, y, z;
Vector3 operator*(float val)const{
return Vector3{val * x,val * y,val * z};
}
};

int main(){
Vector3 v1{1,2,3};
auto v2 = v1*2;
std::cout << typeid(v2.x).name();
}
Live
如果你想以相反的顺序使用乘法
#include <typeinfo>
#include <iostream>

struct Vector3
{
Vector3(float x, float y, float z): x{x}, y{y}, z{z}{}
float x, y, z;
};
Vector3 operator*(float val, const Vector3& v){
return Vector3{val * v.x,val * v.y,val * v.z};
}

int main(){
Vector3 v1{1,2,3};
auto v2 = 2*v1;
std::cout << typeid(v2.x).name();
}
为了简单起见,我使用了公共(public)成员。您可能希望将私有(private)的与 setter 和 getter 一起使用。

关于可以采用整数或 float 或 double 或任何其他可转换为 float 的 C++ 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63093618/

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