Custom Type Conversions
-
template<class Dandy, class Foreign>
struct converter Interface to convert between a dandy vector type and an arbitrary foreign type.
Note
The Foreign type has to be default constructable
There is currently no mechanism to allow only one way of the conversion
- param Dandy
A dandy vector type
- param Foreign
A foreign type
Adding a conversion
Start by specializing the converter
struct for the desired dandy type and desired
foreign type in that order. Then add two static methods named convert
, each taking as
parameters one of the types to convert from and a reference to the other type to convert to.
Examples
Specialization to convert between int3d
and std::array<int, 3>
:
template<>
struct dd::converter<int3d, std::array<int, 3>>
{
static void convert(const int3d& from, std::array<int, 3>& to)
{
to[0] = from.x;
to[1] = from.y;
to[2] = from.z;
}
static void convert(const std::array<int, 3>& from, int3d& to)
{
to.x = from[0];
to.y = from[1];
to.z = from[2];
}
};
Specialization to convert between dd::vector<T, 2>
and a user defined vector type some_vector<T>
:
template<class T>
struct some_vector
{
T x, y;
};
template<class T>
struct dd::converter<dd::vector<T, 2>, some_vector<T>>
{
using dandy = dd::vector<T, 2>;
using foreign = some_vector<T>;
static void convert(const dandy& from, foreign& to)
{
to.x = from.x;
to.y = from.y;
}
static void convert(const foreign& from, dandy& to)
{
to.x = from.x;
to.y = from.y;
}
};