是否可以使用循环对其所有类型执行类方法

Is it possible to use a loop to perform a class method on all of it's type

本文关键字:类型 执行 类方法 可以使 循环 是否      更新时间:2023-10-16

我正在尝试编写一个tile引擎,我的一个类中有一个方法,我需要一种能够使用一个循环为该类的所有现有实例执行该方法的方法,例如,如果我有一个名为tile的GameObject,和另一个被称为敌人的人,是否有一种方法可以调用GameObject::为他们两个渲染,而不必在循环中指定他们的名字?

您要查找的是观察者模式。

基本上,您试图为一个类的多个实例触发一个事件。

您将有一个观察器类,将要通知的类的所有实例(可能在构造函数中)注册到该类。

你必须做一些工作。例如,在GameObject类的构造函数中,您可以将指向正在创建的GameObject的指针添加到列表中。然后在析构函数中,可以从同一列表中删除指向被销毁对象的指针。这样,你就有了一个指向所有实时GameObject的指针列表,只要你觉得需要,你就可以循环浏览。

class GamePublisher{
public:
   void Attach(GameObject *);
   void Detach(GameObject *);
   void RenderGameObjects();
   static GamePublisher& GetPublisher();
}
void GamePublisher::RenderGameObjects(){
//This is just an example for simplicity, the syntax my be a little off, assuming you have knowledge of functors.
std::for_each(gameObjectContainer.begin(), gameObjectContainer.end(), render_functor);
}
//somewhere else...
class GameObject{
   public:
     virtual void Render()=0;
}
class Tile : public GameObject
{
   public:
     virtual void Render();//your implementation...
     Tile();
}
Tile::Tile() //: member initilizations...{
   GamePublisher::GetPublisher.Attach(this);
}

您将不得不处理附加/分离,并且取决于多线程,必须想出或重用一种机制来在多个线程之间处理此问题。除此之外,我认为这对你有用。祝你好运

您可以处理从析构函数分离。