你能显式使用构造函数重载吗



如果我有两个构造函数重载

calculations(double vector, double angle);
calculations(double horizontalVector, double verticalVector);

我如何确保编译器专门使用我选择的重载之一(因为每个重载在幕后都做不同的事情(?

如果您想要重载,则类型需要不同。实现这一点的一种方法是所谓的整体价值习语。

为每个参数制作一个struct:矢量(注意潜在的名称冲突(、角度等等

您将有两个不同的构造函数。

假设您的参数实际上是极坐标和笛卡尔坐标,而不是矢量,

calculations(double length, double angle);
calculations(double x_coordinate, double y_coordinate);

你可以把它们抽象成类型,

struct Polar { double length, angle; };
struct Cartesian {double x, y; };

和过载

calculations(const Polar& p);
calculations(const Cartesian& c);

然后

calculations c1(Polar{1,1});
calculations c2(Cartesian{1,1});

要用相同的参数提供不同的函数,可以使用标记调度,在标记调度中提供未使用的参数来进行重载。

struct Calculations {
struct UseTwoVectors {};
Calculations(double vector, double angle);
Calculations(double horizontalVector, double verticalVector, const UseTwoVectors&);
};
int main() {
Calculations c(1, 2);
Calculations d(1, 2, Calculations::UseTwoVectors());
}

总的来说,我不知道这些论点代表了什么——我怀疑代码中的抽象有问题。您可以采用不同的方法,并根据参数创建一个类。

struct VectorAngle {
double vector, angle;
};
struct TwoVectors {
double horizontalVector, verticalVector;
};
struct Calculations {
Calculations(const VectorAngle& v);
Calculations(const TwoVectors& v);
};
int main() {
Calculations c(VectorAngle{1, 2});
Calculations d(TwoVectors{1, 2});
};

相关内容

  • 没有找到相关文章

最新更新