【发布时间】:2016-07-21 04:52:09
【问题描述】:
根据http://www.cocos2d-x.org/wiki/Value,
Value 可以处理字符串以及 int、float、bool 等。
当我不得不在使用之间做出选择时,我很困惑
std::string
或
Value
在什么情况下我应该在 std::string 上使用 Value,反之亦然??
【问题讨论】:
标签: cocos2d-x cocos2d-x-3.0 cocos2d-x-2.x
根据http://www.cocos2d-x.org/wiki/Value,
Value 可以处理字符串以及 int、float、bool 等。
当我不得不在使用之间做出选择时,我很困惑
std::string
或
Value
在什么情况下我应该在 std::string 上使用 Value,反之亦然??
【问题讨论】:
标签: cocos2d-x cocos2d-x-3.0 cocos2d-x-2.x
我认为你误解了Value 对象。如您链接到的文档中所述:
cocos2d::Value 是许多原语([...] 和 std::string)加上 [...]
的包装类
所以真的Value 是一个包装了一堆其他类型变量的对象,它允许cocos2d-x 具有像ValueMap 这样的松散类型结构(字符串的哈希到Values - 其中每个@ 987654325@ 可以是不同类型的对象)和ValueVector(Values 的列表)。
例如,如果你想要一个配置散列,其键都是字符串,但有一堆不同的值 - 在普通 C++ 中,你必须为你想要的每种类型的值创建一个单独的数据结构保存,但使用 Value 你可以这样做:
unordered_map<std::string, cocos2d::Value> configuration;
configuration["numEnemies"] = Value(10);
configuration["gameTitle"] = Value("Super Mega Raiders");
这只是一种在 C++(一种强类型语言)中创建一些松散类型的机制。
您可以将字符串保存在 Value 中,如下所示:
std::string name = "Vidur";
Value nameVal = Value(name);
然后用以下方法检索它:
std::string retrievedName = nameVal.asString();
如果您尝试将 Value 解析为错误的类型,它将在运行时引发错误,因为这不是编译器可以解决的问题。
如果您有任何问题,请告诉我。
【讨论】: