我正在为游戏引擎创建消息传递系统,其中引擎的最终用户可以创建消息对象并将其传递给游戏对象,以由包含附加到游戏对象的组件的侦听器对象进行解释.如果消息与侦听器正在侦听的消息匹配,则侦听器应调用函数指针并将其传递给已接收的消息.基本结构看起来像这样:
class Message
{
std::string message;
};
class Listener
{
std::string target;
void (*fn)(Message*);
};
Run Code Online (Sandbox Code Playgroud)
使用游戏对象的代码来接收如下所示的消息:
//if the queue is empty then dont do anything
if (messageQueue.empty())
{
return;
}
//else grab the front of the queue
Message* newMessage = messageQueue.front();
//pop our message from the queue
messageQueue.pop();
//for each component in our list
for (std::vector<Component*>::iterator i = ComponentList.begin(); i < ComponentList.end(); i++)
{
Component* itemp = *i;
//for each message in its listener list
for (std::vector<Listener*>::iterator j = itemp->Listeners.begin(); …Run Code Online (Sandbox Code Playgroud)