Сообщение type converter от 26.09.2018 9:52
Изменено 26.09.2018 9:55 SomeOne_TT
type converter
Есть три внешние иерархии типов, которые надо маппить друг в друга.
Первая иерархия построена на enum-like int
Вторая — классические типы
Третья — весьма странный (не понимаю, зачем?) способ
Задача — написать конвертер, который маппит значение из одной иерархии в другую.
Желаемый интерфейс — что-то вроде
Что ни придумаю — выходят какие-то уродцы, да еще и ns_crap::Fruit как темплейт аргумент применить невозможно, т.к. это не тип и не значение.
Какие есть варианты?
Первая иерархия построена на enum-like int
namespace ns_val
{
int APPLE = 0
int PINEAPPLE = 1
int PEAR = 2
}
Вторая — классические типы
namespace ns_types
{
struct Apple
struct Pineapple
struct Pear
}
Третья — весьма странный (не понимаю, зачем?) способ
namespace ns_crap
{
struct Fruit:Base_Fruit
{
public:
static const Fruit& Apple;
static const Fruit& Pineapple;
static const Fruit& Pear;
}
}
Задача — написать конвертер, который маппит значение из одной иерархии в другую.
Желаемый интерфейс — что-то вроде
template <...>
struct Mapping
{
using type = T;
int val;
Fruit obj;
}
from_val<ns_val::APPLE>()::type|obj
from_type<ns_types::Pear>()::obj|val
from_crap<ns_crap::Fruit::Pineapple>::type|val
Что ни придумаю — выходят какие-то уродцы, да еще и ns_crap::Fruit как темплейт аргумент применить невозможно, т.к. это не тип и не значение.
Какие есть варианты?
type converter
Есть три внешние иерархии типов, которые надо маппить друг в друга.
Первая иерархия построена на enum-like int
Вторая — классические типы
Третья — весьма странный (не понимаю, зачем?) способ
Задача — написать конвертер, который маппит значение из одной иерархии в другую.
Желаемый интерфейс — что-то вроде
Что ни придумаю — выходят какие-то уродцы, да еще и ns_crap::Fruit как темплейт аргумент применить невозможно, т.к. это не тип и не значение.
Какие есть варианты?
Первая иерархия построена на enum-like int
namespace ns_val
{
int APPLE = 0
int PINEAPPLE = 1
int PEAR = 2
}
Вторая — классические типы
namespace ns_types
{
struct Apple
struct Pineapple
struct Pear
}
Третья — весьма странный (не понимаю, зачем?) способ
namespace ns_crap
{
struct Fruit:Base_Fruit
{
public:
static const Fruit& Apple;
static const Fruit& Pineapple;
static const Fruit& Pear;
}
}
Задача — написать конвертер, который маппит значение из одной иерархии в другую.
Желаемый интерфейс — что-то вроде
template <...>
struct Mapping
{
using type = T;
int val;
Fruit obj;
}
from_val<ns_val::APPLE>()::type|obj
from_type<ns_types::Pear>()::obj|val
from_crap<ns_crap::Fruit::Pineapple>()::type|val
Что ни придумаю — выходят какие-то уродцы, да еще и ns_crap::Fruit как темплейт аргумент применить невозможно, т.к. это не тип и не значение.
Какие есть варианты?