📄 cvariant.h
字号:
#ifndef CVARIANT_H#define CVARIANT_H#include <string>#include <string.h>#include <stdio.h>#include <stdlib.h>#include "CDate.h"#include "CSqlShared.h"# if defined(_REENTRANT)#include "mymutex.h"#include "mymutexpool_p.h"# endifusing namespace std;class CVariant{public: enum Type//定义支持的数据类型 { Invalid = 0,//无效类型 Bool = 1,//bool类型 UShort = 2,//无符号短整数 Short = 3,//短整数 UInt = 4,//无符号整数 Int = 5,//整数 ULong = 6,//无符号长整数 Long = 7,//长整数 Float = 8,//单精度浮点数 Double = 9,//双精度浮点数 Pchar = 10 ,//字符串指针 mydate = 11 //时间类 }; CVariant ();//构造空的CVariant类型 CVariant (const CVariant &);//拷贝构造CVariant类型 CVariant (bool val);//以布尔型构造CVariant类型 CVariant (unsigned short val);//以无符号短整数构造CVariant类型 CVariant (short val);//以短整数构造CVariant类型 CVariant (unsigned int val);//以无符号整数构造CVariant类型 CVariant (int val);//以整数构造CVariant类型 CVariant (unsigned long val);//以无符号长整数构造CVariant类型 CVariant (long val);//以长整数构造CVariant类型 CVariant (float val);//以单精度浮点数构造CVariant类型 CVariant (double val);//以双精度浮点数构造CVariant类型 CVariant (const char *val);//以字符串构造CVariant类型 CVariant (const CDate_T& val);//以CDate_T类构造CVariant类型 ~CVariant ();//析构CVariant类型 CVariant & operator = (const CVariant &);//支持=运算符 bool operator == (const CVariant &) const ;//支持==运算符 bool operator != (const CVariant &) const ;//支持!=运算符 operator bool(void) { return this->toBool(); } operator unsigned short(void) { return this->toUShort(); } operator short(void) { return this->toShort(); } operator unsigned int(void) { return this->toUInt(); } operator int(void) { return this->toInt(); } operator unsigned long(void) { return this->toULong(); } operator long(void) { return this->toLong(); } operator float(void) { return this->toFloat(); } operator double(void) { return this->toDouble(); } operator const char*(void) { return this->toPchar(); } operator CDate_T(void) { return this->toMyDate(); } inline Type type () const;//返回当前类型 const char *typeName () const;//返回当前类型名 bool canCast (Type) const;//当前类型能否转化为参数中类型 bool cast (Type);//将当前类型转化为参数中类型 inline bool isValid () const;//是否是无效类型 bool isNull () const;//是否是空值 void clear ();//清除数据 bool toBool () const;//将当前值转化为bool型返回,但不改变当前类型 unsigned short toUShort (bool * ok = NULL) const;//将当前值转化为unsigned short型返回,但不改变当前类型,结果放入ok short toShort (bool * ok = NULL) const;//将当前值转化为short型返回,但不改变当前类型,结果放入ok unsigned int toUInt (bool * ok = NULL) const;//将当前值转化为unsigned int型返回,但不改变当前类型,结果放入ok int toInt (bool * ok = NULL) const;//将当前值转化为int型返回,但不改变当前类型,结果放入ok unsigned long toULong (bool * ok = NULL) const;//将当前值转化为unsigned long型返回,但不改变当前类型,结果放入ok long toLong (bool * ok = NULL) const;//将当前值转化为int型返回,但不改变当前类型,结果放入ok float toFloat (bool * ok = NULL) const;//将当前值转化为double型返回,但不改变当前类型,结果放入ok double toDouble (bool * ok = NULL) const;//将当前值转化为double型返回,但不改变当前类型,结果放入ok const char *toPchar (bool * ok = NULL) const ;//将当前值转化为const char*型返回,但不改变当前类型,结果放入ok CDate_T toMyDate (bool * ok = NULL) const;//将当前值转化为CDate_T型返回,但不改变当前类型,结果放入ok bool asBool ();//将CVariant中的内部类型及值转化为bool unsigned short asUShort ();//将CVariant中的内部类型及值转化为unsigned short short asShort ();//将CVariant中的内部类型及值转化为short unsigned int asUInt ();//将CVariant中的内部类型及值转化为unsigned int int asInt ();//将CVariant中的内部类型及值转化为int unsigned long asULong ();//将CVariant中的内部类型及值转化为unsigned long long asLong ();//将CVariant中的内部类型及值转化为long float asFloat ();//将CVariant中的内部类型及值转化为double double asDouble ();//将CVariant中的内部类型及值转化为float const char *asPchar ();//将CVariant中的内部类型及值转化为const char* CDate_T asMyDate ();////将CVariant中的内部类型及值转化为CDate_T static const char *typeToName (Type typ);//返回类型对应的名字 static Type nameToType (const char *name);//返回名字对应的类型private: void detach ();//脱离对当前值的依赖,建立自己的值拷贝 bool str_can_double (const char *pszStr) const;//字符串能否转化为double bool str_can_long (const char *pszStr) const;//字符串能否转化为long class Private:public CShared//继承自CShared的私有类 { public: Private (); Private (Private *); ~Private (); void clear ();//清除数据 Type typ;//当前值的类型 union { bool b; unsigned short us; short s; unsigned int ui; int i; unsigned long ul; long l; float f; double d; char *ptr; CDate_T* date; } value;//当前值 };// static std::string i_temp; Private *d;//私有类指针};#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -