本文来自http://blog.csdn.net/runaying ,引用必须注明出处!
cocos2d-x节点(CCDataVisitor.h)API
温馨提醒:为了大家能更好学习,强烈推荐大家看看本人的这篇博客 Cocos2d-X权威指南笔记
根据你的多态对象类型帮助你执行动作
///\cocos2d-x-3.0alpha0\cocos2dx\cocoa
//根据你的多态对象类型帮助你执行动作
#ifndef __CCDATAVISITOR_H__
#define __CCDATAVISITOR_H__
#include "platform/CCPlatformMacros.h"
#include <string>
NS_CC_BEGIN
class Object;
class Bool;
class Integer;
class Float;
class Double;
class String;
class Array;
class Dictionary;
class Set;
class Data;
/**
* @addtogroup data_structures
* @{
*/
/**
* 根据你的多态对象类型帮助你执行动作
*
*用例:
* - 序列化的数据
* - 打印漂亮的对象
* - 安全读取 Array, Dictionary, Set
*
* 用途:
* 1. DataVisitor 的子类
* 2. 你需要执行的对象 overload visit() 方法
* 3. 在 visitObject() 处理其它对象
* 4. 使用 Object::acceptVisitor() 通过你的 visitor
*/
class CC_DLL DataVisitor
{
public:
/**
* @js NA
* @lua NA
*/
virtual ~DataVisitor() {}
/** 默认的方法,可以称为 non-overloaded 方法 and 不能识别的对象 */
virtual void visitObject(const Object *p) = 0;
virtual void visit(const Bool *p);
virtual void visit(const Integer *p);
virtual void visit(const Float *p);
virtual void visit(const Double *p);
virtual void visit(const String *p);
virtual void visit(const Array *p);
virtual void visit(const Dictionary *p);
virtual void visit(const Set *p);
virtual void visit(const Data *p);
};
class CC_DLL PrettyPrinter : public DataVisitor
{
public:
PrettyPrinter(int indentLevel = 0);
virtual void clear();
virtual std::string getResult();
virtual void visitObject(const Object *p);
virtual void visit(const Bool * p);
virtual void visit(const Integer *p);
virtual void visit(const Float *p);
virtual void visit(const Double *p);
virtual void visit(const String *p);
virtual void visit(const Array *p);
virtual void visit(const Dictionary *p);
virtual void visit(const Set *p);
virtual void visit(const Data *p);
private:
void setIndentLevel(int indentLevel);
int _indentLevel;
std::string _indentStr;
std::string _result;
};
// end of data_structure group
/// @}
NS_CC_END
#endif // __CCDATAVISITOR_H__