把堆栈参数放到地图上?

时间:2016-01-15 08:03:25

标签: c++ dictionary parameters cocos2d-x

我在CCArmatureDataManager.cpp 253行查看此代码。 RelativeData是一个struct.Here,将一个堆栈参数放入一个map中。为什么,没问题?有人向我解释这个吗? THX !!!

struct RelativeData
{
    std::vector<std::string> plistFiles;
    std::vector<std::string> armatures;
    std::vector<std::string> animations;
    std::vector<std::string> textures;
};

void CCArmatureDataManager::addRelativeData(const std::string& configFilePath)
{
    if (_relativeDatas.find(configFilePath) == _relativeDatas.end())
    {
        _relativeDatas[configFilePath] = RelativeData();
    }
}

2 个答案:

答案 0 :(得分:1)

在表达式

_relativeDatas[configFilePath] = RelativeData()

RelativeData()部分创建一个临时的默认构造对象。

_relativeDatas[configFilePath]部分调用std::map::operator[],将引用返回给对象。

赋值从临时对象复制到引用[]运算符返回的对象。换句话说,RelativeData copy assignment operator被调用(如果您没有,编译器将为您创建一个)。

如果没有带有键configFilePath的元素,那么地图将默认构造一个,并返回对它的引用。

所以你的代码所做的是创建两个类型为RelativeData的默认构造对象,并将内容从一个复制到另一个。这可能不是那么友好的话,几乎没用。

答案 1 :(得分:0)

看起来该函数只是添加一个空结构(如果不存在)_relativeDatas映射(最看似std :: map&lt; std :: String configFile,struct RelativeData&gt;),然后可以填充数据