24 template <
class TScalar>
28 static auto impl(TScalar
const& s) -> TTo {
29 return static_cast<TTo
>(s);
32 static auto implScalar(TScalar
const& s) -> TTo {
33 return static_cast<TTo
>(s);
37 template <::sophus::concepts::EigenType TT>
41 static auto impl(TT
const& v) {
42 return v.template cast<typename TTo::Scalar>().eval();
45 static auto implScalar(TT
const& v) {
46 return v.template cast<TTo>().eval();
51 class Cast<std::vector<TT>> {
54 static auto impl(std::vector<TT>
const& v) {
55 using ToEl = std::decay_t<decltype(*std::declval<TTo>().data())>;
58 for (
auto const& el : v) {
59 r.push_back(Cast<TT>::template impl<ToEl>(el));
64 static auto implScalar(std::vector<TT>
const& v) {
65 using ToEl = decltype(Cast<TT>::template implScalar<TTo>(v[0]));
68 for (
auto const& el : v) {
69 r.push_back(Cast<TT>::template impl<ToEl>(el));
77 template <
class TTo,
class TT>
79 return details::Cast<TT>::template impl<TTo>(p);
82 template <::sophus::concepts::Arithmetic TTo,
class TT>
83 auto cast(
const TT& p) {
84 return details::Cast<TT>::template implScalar<TTo>(p);