To provide different functions with same parameters you can use tag dispatching, where you provide unused parameter to do overloading.
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());
}
Overall I do not know what these arguments represent - I suspect there is something wrong with abstraction in your code. You could take a different approach and make a class from your parameters.
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});
};