如何从ExitGames::Common::Object& eventContent中获取事件数据?

How to obtain event data from ExitGames::Common::Object& eventContent?

参考这个 link “http://recruit.gmo.jp/engineer/jisedai/blog/cocos2d-x_photon/”,我正在尝试 运行 使用 cocos2dx 2.2.6 和 photon sdk v4-0 显示简单网络功能的示例- 0-5。该指南建议以这种方式实施 customEventAction:

void NetworkLogic::customEventAction(int playerNr, nByte eventCode, const ExitGames::Common::Object& eventContent)
{
    ExitGames::Common::Hashtable* event;

    switch (eventCode) {
        case 1:
            event = ExitGames::Common::ValueObject<ExitGames::Common::Hashtable*>(eventContent).getDataCopy();
            float x = ExitGames::Common::ValueObject(event->getValue(1)).getDataCopy();
            float y = ExitGames::Common::ValueObject(event->getValue(2)).getDataCopy();
            eventQueue.push({static_cast(playerNr), x, y});
            break;
    }
}

Xcode 给出错误提示:

Cannot refer to class template "ValueObject" without a template argument list

我自己不熟悉模板,谁能推荐一个合适的方法来提取事件数据,以便将其推送到 eventQueue?或者指出上面代码中的错误。非常感谢!

请尝试以下代码:

void NetworkLogic::customEventAction(int playerNr, nByte eventCode, const ExitGames::Common::Object& eventContent)
{
    ExitGames::Common::Hashtable* event;

    switch (eventCode) {
        case 1:
            event = ExitGames::Common::ValueObject<ExitGames::Common::Hashtable*>(eventContent).getDataCopy();
            float x = ExitGames::Common::ValueObject<float>(event->getValue(1)).getDataCopy();
            float y = ExitGames::Common::ValueObject<float>(event->getValue(2)).getDataCopy();
            eventQueue.push({static_cast(playerNr), x, y});
            break;
    }
}

我刚刚将 x 和 y 的 ExitGames::Common::ValueObject 更改为 ExitGames::Common::ValueObject<float>

对于模板,编译器需要一种方法来找出它应该为什么类型创建模板。 由于编译器不可能从参数 event->getValue() 中获取该信息,并且它不能基于 return 类型获取该信息,因此您必须通过编写 ValueObject<type> 而不仅仅是 ValueObject 来明确指定 ValueObject 实例的预期有效负载数据的类型,因此在您的情况下 ValueObject<float>.