没有数组的多个项目

时间:2012-08-21 23:15:44

标签: c++

我与mmorpg合作,我正在创建一个名为chatlink的系统。在这个系统上,当玩家按下项目时按下该项目,该项目在聊天中被链接,因此当发送时,所有收到聊天消息的玩家都可以点击该部分句子,并且会出现一个带有项目规格的窗口起来。

考虑下面的内容:

玩家:嘿,我正在销售<ItemA><Scale Boots>

我必须在类上存储以下内容,(<位置开始),(>位置结束),项目名称颜色,项目(项目通过void *指针存储)。我有以下课程:

class chatitem
{
public:
    chatitem();
    ~chatitem();

    u_long m_uStartPos;
    u_long m_uEndPos;
    DWORD m_dwColor;
    void* m_pItemElem;
};

我想将它存储在地图上: map<unsigned int, chatitem*>m_chatItem unsigned是输入的聊天行的ID。问题是每个句子最多可以存储3个项目。我考虑过以下几点:

class CChatItem
{
public:
    CChatItem();
    ~CChatItem();

    u_long m_uStartPos[3];
    u_long m_uEndPos[3];
    DWORD m_dwColor[3];
    void* m_pItemElem[3];
};

或复制如:

u_long m_uStartPos, u_long m_uStartPos2, u_long m_uStartPos3;

但我不想同时使用它们,所以任何提示?

2 个答案:

答案 0 :(得分:1)

std::map<unsigned, std::array<chatitem*, 3>>

看起来这个账单适合我。

答案 1 :(得分:0)

您可以设置地图密钥类型std::tuple<unsigned int, unsigned int>。然后将元组的第二项作为聊天行中的位置。或者你可以定义一个自定义结构来做同样的事情。

这种方法优于数组的优点是您对每个聊天行的项目数没有严格的限制。 (您可能总是希望稍后扩展它。)