繁体   English   中英

将多个向量强制转换为无效*

[英]Cast multiple vectors to void *

我目前正在研究一个Roguelike,其中我有多个不同的事件队列(以矢量的形式),可以处理多个不同的事件类别。 或更确切地说,不同的游戏对象具有自己的私人事件队列。

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

磁贴的结构如下:

struct tile{
  int t_type;
  trigger t_dgram;

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

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

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

void tile :: trigger_tile(int ns, int we, void *queue_ob);

tile对象本身将能够确定正确的队列向量类型,并使用trigger t_dgram成员变量取消引用void指针,但这是一个好主意吗? 有没有我不知道的危险?

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

感谢您的时间。

在我看来,“触发”听起来像是一堂课。

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

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

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

现在,从Trigger派生的类可以保存指向任何队列的指针,甚至可以执行不涉及队列的操作。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM