将多个向量转换为void *

时间:2017-07-27 15:00:52

标签: c++ pointers vector void roguelike

我目前正在开发一个Roguelike,我有多个不同的事件队列(以向量的形式),处理多个不同的事件类别。或者更确切地说,不同的游戏对象有自己的私人事件队列。

在地图图块数据中,我有一个特殊的触发器结构,当玩家(或其他任何东西)进入图块时激活。此tile结构提供用于生成事件标志的数据,然后需要将其置于适当的事件队列中。

图块结构如下:

git rebase origin/saurabh

触发器结构本身可以保存用于确定哪个队列是合适的队列的信息,但是为地图中的每个图块保存指向所有可能的事件队列的指针是不可行的,特别是因为我有动态生成地图的地图无限地图。

所以问题是双重的:在调用函数时将向量转换为void指针是否是个好主意:

struct tile{
  int t_type;
  trigger t_dgram;

  vector<actor*> occupied;
  vector<item*> loot;
public:
  void trigger_tile(int ns, int we, );
};

void tile :: trigger_tile(int ns, int we, void *queue_ob); 对象本身将能够使用tile成员变量确定正确的队列向量类型并取消引用void指针,但这是一个好主意吗?我不知道这有什么危险吗?

你个人如何建议我达到类似的效果?

感谢您的时间。

2 个答案:

答案 0 :(得分:1)

“触发器”听起来像是一堂课。

struct Trigger {
    virtual void triggeredOn(tile *tile) = 0;
}

然后tile有一个指向其触发器的指针:

struct tile{
  ...
  ...
  Trigger *trigger;
  void trigger_tile(int ns, int we, ){trigger.triggeredOn(this)};
};

现在从Trigger派生的类可以保存指向任何队列的指针,甚至可以做一些不涉及队列的事情。

答案 1 :(得分:0)

  

所以问题是双重的:在调用函数时将向量转换为void指针是否是个好主意:

不,这听起来不对。也许您打算将向量转换为void*,只要在访问向量元素之前使用void*强制转换的下游函数返回到向量指针,这将是正常的。