小编Dou*_*Dan的帖子

我应该改变我的设计以防止动态演员表吗?

我已经阅读了几个关于C++动态转换的线程,所有人都声称它表明设计不好.在其他语言中,我在检查对象的类型时从未考虑过太多.我从不使用它作为多态性的替代,只有当强耦合看起来完全可以接受时.我经常遇到的这些情况之一:有一个列表(我在C++中使用std :: vector)的对象,都是从一个公共基类派生的.该列表由一个允许知道不同子类的对象管理(通常它是管理对象类中私有类的一个小层次).通过将它们保存在单个列表(数组,向量,...)中,我仍然可以从多态中受益,但是当一个操作意图作用于特定子类的对象时,我使用动态转换或类似的东西.

如果没有我缺少的动态强制转换或类型检查,是否存在针对此类问题的不同方法?我真的好奇那些不惜一切代价避免这些的程序员会如何处理它们.

如果我的描述过于抽象,我可以在C++中编写一个简单的例子(编辑:见下文).

class EntityContacts {
private:
  class EntityContact {
  private:
    virtual void someVirtualFunction() { };            // Only there to make dynamic_cast work
  public:
      b2Contact* m_contactData;
  };

  class InternalEntityContact : public EntityContact {
  public:
    InternalEntityContact(b2Fixture* fixture1, b2Fixture* fixture2){
        m_internalFixture1 = fixture1;
        m_internalFixture2 = fixture2;
    };

    b2Fixture* m_internalFixture1;
    b2Fixture* m_internalFixture2;
  };

  class ExternalEntityContact : public EntityContact {
  public:
    ExternalEntityContact(b2Fixture* internalFixture, b2Fixture* externalFixture){
        m_internalFixture = internalFixture;
        m_externalFixture = externalFixture;
    };

    b2Fixture* m_internalFixture;
    b2Fixture* m_externalFixture;
  };

  PhysicsEntity* m_entity;
  std::vector<EntityContact*> m_contacts;
public: …
Run Code Online (Sandbox Code Playgroud)

c++ oop dynamic-cast

8
推荐指数
2
解决办法
1078
查看次数

C++和Objective C之间的事件处理

我最近开始研究iOS游戏,并决定用C++编写项目的一个独特部分.只要Objective C类只是访问某些成员或调用C++对象上的函数,这种方法似乎工作正常.但是我似乎找不到一种优雅的方法来让我的Objective C类响应C++类中的'events'.任何使用回调的事件处理系统似乎都是不可能的(因为Objective C方法和C++函数可能不可互换).我能想到的是使用委托模式和围绕我的C++委托类编写包装类,以便我可以在Objective C代码中使用它们.所以我的问题是:有更好的方法吗?

注意:我想防止在我的C++文件中直接使用Objective C,因为这些类应该是独立于平台的.

c++ events xcode objective-c ios

7
推荐指数
1
解决办法
759
查看次数

标签 统计

c++ ×2

dynamic-cast ×1

events ×1

ios ×1

objective-c ×1

oop ×1

xcode ×1