哪一个在cocos2d-x V3 C ++中使用Value vs std :: string?

时间:2016-07-21 04:52:10

标签: cocos2d-x cocos2d-x-3.0 cocos2d-x-2.x

根据http://www.cocos2d-x.org/wiki/Value

值可以处理字符串以及int,float,bool等。

当我必须在使用

之间做出选择时,我感到很困惑
std::string

Value

在什么情况下我应该使用Value而不是std :: string,反之亦然?

1 个答案:

答案 0 :(得分:0)

我认为你误解了Value对象。如您链接到的文档中所述:

  

cocos2d :: Value是许多基元的包装类([...]和std :: string)加上[...]

所以真的Value是一个包装其他类型变量的对象,它允许cocos2d-x具有松散类型的结构,如ValueMap(字符串的散列到{{1}每个Values可以是不同类型的对象)和ValueValueVector列表)。

例如,如果你想要一个配置哈希,其键都是字符串,但是有一堆不同的值 - 在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(); 解析为错误的类型,它将在运行时抛出错误,因为这不是编译器可以解决的问题。

如果您有任何问题,请告诉我。