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