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