COCOS2D-3.9 Value接口分析

来源:互联网 发布:ubuntu查找源命令 编辑:程序博客网 时间:2024/05/19 13:10
2DX 在3.2时没有引入 Value 概念,用于存放动态类型,实际值通过当时类型和值获取。


头文件中定义的几个类型和常量
typedef std::vector<Value> ValueVector;
存放 Value 类型的动态数组
typedef std::unordered_map<std::string, Value> ValueMap;
散列容器 string->Value
typedef std::unordered_map<int, Value> ValueMapIntKey;
散列容器 int->Value


针对上面的容器稍微有点看法:个人觉得RB的容器在数据量小的时候体现不出优势,但是 unordered_map 也不一定真的就比RB好


CC_DLL extern const ValueVector ValueVectorNull;
CC_DLL extern const ValueMap ValueMapNull;
CC_DLL extern const ValueMapIntKey ValueMapIntKeyNull;
这几个空容器没搞懂为啥


Value 中比较重要的两个结构。
枚举类型 Type , 分别用于表示 :
NONE (空类型), BYTE(字节), INTEGER(整型), FLOAT(浮点数),DOUBLE(双精度), 
BOOLEAN(布尔), STRING(字符串), VECTOR(数组), MAP(StringKey), INT_KEY_MAP(IntKey)
枚举类型 Type _type; 字段表示当前实际类型。
联合体 _field 字段,分别用于存放对应类型的数据:
unsigned char byteVal(BYTE); int intVal(INTEGER); float floatVal(FLOAT); double doubleVal(DOUBLE); bool boolVal(BOOLEAN);
std::string* strVal(STRING); ValueVector* vectorVal(VECTOR); ValueMap* mapVal(MAP); ValueMapIntKey* intKeyMapVal(INT_KEY_MAP);

通过对应获取实际的值。


私有函数:
void clear();
通过当前类型清除当前类型的值,并将 _type 设置为 NONE
void reset(Type type);
设置当前类型,若类型没变则无操作,否则将清除,如果为指针类型,还将分配对象空间。


公共函数:
inline Type getType() const { return _type; }
获取当前类型
std::string getDescription() const;
获取描述,具体的值。
inline bool isNull() const { return _type == Type::NONE; }
获取类型是否可用
unsigned char asByte() const;
int asInt() const;
float asFloat() const;
double asDouble() const;
bool asBool() const;
返回基本类型的值
std::string asString() const;
将基本类型和字符串类型已字符串类型返回


特殊说明:基本类型和string之间会相互转换。也仅限为将当前值转换为指定值


ValueVector& asValueVector();
const ValueVector& asValueVector() const;
获取 ValueVector 引用或者常引用
ValueMap& asValueMap();
const ValueMap& asValueMap() const;
获取 ValueMap 引用或者常引用
ValueMapIntKey& asIntKeyMap();
const ValueMapIntKey& asIntKeyMap() const;
获取 ValueMapIntKey 引用或者常引用


bool operator!= (const Value& v);
bool operator!= (const Value& v) const;
bool operator== (const Value& v);
bool operator== (const Value& v) const;
等于不等于的操作符重载。


Value& operator= (const Value& other);
Value& operator= (Value&& other);


Value& operator= (unsigned char v);
Value& operator= (int v);
Value& operator= (float v);
Value& operator= (double v);
Value& operator= (bool v);
Value& operator= (const char* v);
Value& operator= (const std::string& v);


Value& operator= (const ValueVector& v);
Value& operator= (ValueVector&& v);


Value& operator= (const ValueMap& v);
Value& operator= (ValueMap&& v);


Value& operator= (const ValueMapIntKey& v);
Value& operator= (ValueMapIntKey&& v);
操作符 = 重载,用于赋值一个 Value 对象,指定对应的类型和值,右值引用和一般引用没多大区别,需要注意变量生命周期


Value();
explicit Value(unsigned char v);
explicit Value(int v);
explicit Value(float v);
explicit Value(double v);
explicit Value(bool v);
explicit Value(const char* v);
explicit Value(const std::string& v);
explicit Value(const ValueVector& v);
explicit Value(ValueVector&& v);
explicit Value(const ValueMap& v);
explicit Value(ValueMap&& v);
explicit Value(const ValueMapIntKey& v);
explicit Value(ValueMapIntKey&& v);
Value(const Value& other);
Value(Value&& other);
构造函数、复制构造函数, explicit 防止隐式转换。


静态变量:
static const Value Null;
没发现作用,除了一个空对象
0 0
原创粉丝点击