В настоящее время я работаю с географической библиотекой и хочу иметь векторный класс общего назначения, который можно использовать для точек широты и долготы и проецируемых точек.
Направление точек широты и долготы ist описывается азимутом и длиной, а единица в проецируемом пространстве - двумерным вектором и длиной.
Таким образом, класс должен выглядеть следующим образом:
template <typename T>
struct vector {
direction_t direction;
lenght_t length;
};
Определена точка широты / долготы как:
template <angle_unit T>
struct latlng {
…
};
И точка определяется как:
template <typename projection_t,typename T = double>
struct point {
…
};
Поэтому моей первоначальной идеей было определить direction_t
как direction_trait<T>::direction_type direction
:
template <typename T>
struct vector {
using direction_t = direction_trait<T>::direction_type;
direction_t direction;
lenght_t length;
};
И иметь специализацию direction_trait
для latlng
и point
, без необходимости определять специализацию для каждого из возможных параметров шаблона для latlng
и point
.
Как я могу получить что-то вроде:
template <typename T>
struct direction_trait;
template <latlng>
struct direction_trait {
using direction_t = double;
};
Я не хочу добавлять информацию, связанную с направлением, к заголовку, где определено latlng
или point
.
(я уже придумал, как решить эту проблему, когда писал вопрос, но если есть более изящный способ решения этой проблемы, без этого вспомогательного класса я был бы рад это узнать)