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

时间:2015-03-06 04:44:34

标签: c++ cocos2d-x-2.x photon

参考此链接" 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?或者指出上面代码中出了什么问题。非常感谢提前!

1 个答案:

答案 0 :(得分:1)

请尝试以下代码:

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-&gt; getValue()获取该信息,并且因为它无法根据返回类型执行此操作,因此您必须指定通过编写ValueObject<type>而不仅仅是ValueObject显式地显示ValueObject实例的预期有效内容数据的类型,因此在您的情况下ValueObject<float>