Я абсолютно потерял при попытке переноса Richard Lord's Ash Framework на «чистый» C++ (MSVC Express 2008) или, по крайней мере, я не смог найти какую-либо реализацию, Я беспорядок с помощью boost: fusion libs для реализации требований к минимальной рефлексии, которые требуются инфраструктурам, но метапрограммирование шаблона для меня стало новым, и я переполняю ошибки компилятора и длительные испытания отказа :(C++: Внедрение структуры «ясень» Entity framework
Кто-нибудь знает о осуществимость или полезность для переноса рамки?
Взяв класс Entity в качестве примера, мог ли кто-нибудь уточнить, как я могу достичь результата вроде:
(ЭТО FLEX КОД!)
waitEntity = new Entity("wait")
.add(new WaitForStart(waitView))
.add(new Display(waitView))
.add(new Position(0, 0, 0));
с implementaton C++, как это?
...
namespace bf = boost::fusion;
namespace bm = boost::mpl;
template<typename ComponentMap>
class EntityASH{
public:
EntityASH(ComponentMap c)
:m_components(c){ }
//"fusion-style" trying to return a new Components template entity for a new component type
template<typename T>
EntityASH
template<typename T>
/*¿Here im absoltely lost
EntityASH<
result_of::as_map<
typename result_of::push_back<ComponentMap,
fusion::pair<T,T>
>::type
>
>*/
EntityASH *add(){
typedef bf::pair<T, T> newTentryPair;
//bf::as_map(bf::push_back<ComponentMap,newTentryPair>(m_components,newTentryPair()));
return new EntityASH(bf::as_map(bf::push_back<ComponentMap,newTentryPair>(m_components,newTentryPair())));
...
Теперь я понимаю вашу точку лучше, как я сказал в своем посте, я полностью отключился, пытаясь реализовать эту структуру. Я искал учебник FLex в качестве основы для имитации C++, но это была непростая задача. Прямо сейчас я борюсь с сериализацией/частью отражения и не вижу другого способа реализовать его, чем писать парсер, используя boost: spirit для достижения того же результата ... – user2996040
Возможно, ориентированный на данные дизайн - хорошее ключевое слово для вас. Сериализация действительно проста при использовании принципов, ориентированных на данные. Для отражения вы можете использовать std :: type_index и/или std :: type_info и оператор type_id. – DarthB