4.2.5 _variant_t、CComVariant与COleVariant、CDBVariant
从上面可以看出VARIANT这种类型使用起来比较复杂,其实有简单的办法,那就是采用VARIANT的封装类_variant_t。_variant_t的构造函数接受基本数据类型的数据作为参数,如下列出其中的一小部分:
_variant_t( shortsSrc, VARTYPEvtSrc=VT_I2 ); _variant_t( longlSrc, VARTYPEvtSrc=VT_I4 ); _variant_t( floatfltSrc )throw(); _variant_t( doubledblSrc, VARTYPEvtSrc=VT_R8 );
另一方面,_variant_t提供了反向的转换函数,如将一个_variant_t转换成一个short数值,如下列出其中的一小部分:
operatorshort()const; operatorlong()const; operatorfloat()const; operatordouble()const;
因此可以看出,利用_variant_t可以很方便地实现VARIANT类型和基本数据类型之间的转换,如:
longl=123; _variant_tlVal(l); longm=lVal;
也可以用COleVariant和CComVariant来简化对VARIANT的操作,代码参考如下:
COleVariantv3=_T("hello,world!"); COleVariantv4=(long)1999; CStringstr=(BSTR)v3.pbstrVal; longi=v4.lVal;
VARIANT类图如图4-7所示。
[TR]
[TD][I]498)this.width=498;' onmousewheel = 'javascript:return big(this)' height=190 alt="" src="http://pic.aIhUaU.com/201602/15/110235121.jpg" width=420 border=0>[/TD][/TR]
[TR]
[TD](点击查看大图)图4-7 VARIANT类图[/TD][/TR]此外,在MFC ODBC 编程中,我们还会接触到CDBVariant,CDBVariant没有任何基类,它的功能与COleVariant相似,唯一的差别是它不使用OLE。可以看出,Visual C++为变体提供了太多的封装类,如果可行的话,我们建议读者尽量在自己的代码中采用统一的类,如:_variant_t。