首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >C++:Implementing "ash“实体框架

C++:Implementing "ash“实体框架
EN

Stack Overflow用户
提问于 2013-11-26 23:25:13
回答 1查看 700关注 0票数 0

我完全迷失在试图将Richard Lord's Ash Framework移植到“纯”C++ (MSVC Express2008)上,或者至少我没有找到任何类似的实现,我正在处理boost:fusion库来实现框架所需的最小反射要求,但模板元编程对我来说是新的,我被编译器错误和耗时的失败测试所淹没:( ...

有人知道移植框架的可行性或有用性吗?

以Entity类为例,有没有人能解释一下我如何才能达到这样的效果:

(这是FLEX代码!)

代码语言:javascript
复制
    waitEntity = new Entity( "wait" )
            .add( new WaitForStart( waitView ) )
            .add( new Display( waitView ) )
            .add( new Position( 0, 0, 0 ) );

使用像这样的C++实现?

代码语言:javascript
复制
    ...
    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())));

..。

EN

回答 1

Stack Overflow用户

发布于 2013-11-27 06:44:18

C++中的构造函数不能返回某些内容,因此您必须使用另一种方法来创建实体,由此createEntity()将返回实体对象的引用或std::shared_ptr。

我看不出在这里使用模板有什么好处,因为对我来说,存储对组件的引用似乎更正确,因为组件是实体的一部分,不属于实体:

代码语言:javascript
复制
std::shared_ptr<Entity> createEntity() {
    return std::make_shared<Entity>();
}

...

std::shared_ptr<Entity> addComponent(ComponentBase comp) {
    mComponents.add(comp);
    return shared_from_this();
}

...

createEntity().add(new Position())
          .add(new Display())
          .add(new Position());

我不明白你为什么要在这里使用模板?是否希望组件成为实体类型的真实部分?这意味着你不能在运行时以一种简单的方式添加/删除组件。

我认为在大多数ECS中,实体只是一个容器,出于可用性的原因,它可以完全由一个简单的整数ID替换,但因为这会破坏可用性实体存储对其组件的引用,以便程序员更容易解析。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20221184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档