您的位置:首页 > 移动开发 > Cocos引擎

COCOS2D-3.9 Value接口分析

2015-12-07 22:27 387 查看
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;

没发现作用,除了一个空对象
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: