У меня есть шаблон класса Point, в котором будут храниться координаты x и y, тип данных может быть любым арифметическим c тип.
template <typename T, typename U>
struct Point {
T x;
U y;
};
Класс Line принимает две точки в качестве аргумента конструктора, чтобы найти уравнение of line.
class Line {
public:
Line(Point p1, Point p2) {}
};
Как мне спроектировать класс Line, чтобы он мог принимать объект Point разных типов данных?
Я разработал что-то вроде ниже, как я могу улучшить его?
template <class T, class U,
class = typename std::enable_if<std::is_arithmetic<T>::value &&
std::is_arithmetic<U>::value>::type>
struct Point
{
T x;
U y;
typedef T x_type;
typedef U y_type;
};
template <typename T1,
typename T2,
typename P1 = typename T1::x_type,
typename P2 = typename T1::y_type,
typename P3 = typename T2::x_type,
typename P4 = typename T2::y_type>
class Line {
public:
Line(Point<P1, P2> p1, Point<P3, P4> p2) {}
};
Я планирую использовать:
Point<int, long> p1 (2, 5);
Point<short, double> p2 (77, 33.5);
Line<Point<int, long>, Point<short, double>> line_(p1, p2);
OR
Line<Point<int, short>, Point<float, unsigned>> eq({1, 1}, {2.3f, 2});
Как можно импровизировать или укоротить код.