[cpp] 目前計算機語言多種多樣,如C++、Java、Basic、Pascal等,此外還有JavaScript、VBScript、ActionScript等腳本語言,它們各自維護自己的數據類型,當使用C++這樣強類型的語言來讀取數據庫或者與其他語言之間來交換數據時,它很有可能不知道獲取到的數據的具體類型,這個時候必須借助於變體類型讀取數據。VARIANT數據類型就具有跨語言的特性,同時它可以表示(存儲)任意類型的數據。其在Visual C++中的定義:
1. typedef tagVARIANT VARIANT;
2. typedef struct tagVARIANT VARIANTARG;
VARIANT 其實是一個結構,結構中用一個vt成員表示數據的類型,同時真正的數據則存儲在union空間中。一般我們使用VARIANT的步驟如下所示。
定義一個VARIANT變量,如:var。
通過vt成員設定VARIANT變量的數據類型,如:var.vt = VT_I4。
通過對應的union成員設定數據內容,如:var.lVal = 100。
綜上所述,利用VARIANT表示一個整型數據:
1. VARIANT var;
2. var.vt = VT_I4; //指明整型數據
3. var.lVal = 100; //賦值
4. 利用VARIANT表示一個布爾值:
5. VARIANT var;
6. var.vt = VT_BOOL; //指明整型數據
7. var.boolVal = VARIANT_TRUE; //賦值
8. 利用VARIANT保存一個字符串:
9. VARIANT var;
10. var.vt = VT_BSTR;
11. var.bstrVal = SysAllocString(L"hello, world!");
根據以上的代碼,讀者可能會猜到,VARIANT的定義可能類似於如下:
1. struct VARIANT
2. {
3. VARTYPE vt; //數據類型
4. union
5. {
6. LONG lVal; //VT_I4
7. VARIANT_BOOL boolVal //VT_BOOL
8. BSTR bstrVal; //VT_BSTR
9. }
10. };
實際上,VARIANT的定義就是這樣的!只不過由於它需要支持的類型太多,所以它包含的聯合成員會更多。限於篇幅,在此不再附出。
VARIANT支持的類型,也就是vt成員的取值如表所示。
目前計算機語言多種多樣,如C++、Java、Basic、Pascal等,此外還有JavaScript、VBScript、ActionScript等腳本語言,它們各自維護自己的數據類型,當使用C++這樣強類型的語言來讀取數據庫或者與其他語言之間來交換數據時,它很有可能不知道獲取到的數據的具體類型,這個時候必須借助於變體類型讀取數據。VARIANT數據類型就具有跨語言的特性,同時它可以表示(存儲)任意類型的數據。其在Visual C++中的定義:
1. typedef tagVARIANT VARIANT;
2. typedef struct tagVARIANT VARIANTARG;
VARIANT 其實是一個結構,結構中用一個vt成員表示數據的類型,同時真正的數據則存儲在union空間中。一般我們使用VARIANT的步驟如下所示。
定義一個VARIANT變量,如:var。
通過vt成員設定VARIANT變量的數據類型,如:var.vt = VT_I4。
通過對應的union成員設定數據內容,如:var.lVal = 100。
綜上所述,利用VARIANT表示一個整型數據:
1. VARIANT var;
2. var.vt = VT_I4; //指明整型數據
3. var.lVal = 100; //賦值
4. 利用VARIANT表示一個布爾值:
5. VARIANT var;
6. var.vt = VT_BOOL; //指明整型數據
7. var.boolVal = VARIANT_TRUE; //賦值
8. 利用VARIANT保存一個字符串:
9. VARIANT var;
10. var.vt = VT_BSTR;
11. var.bstrVal = SysAllocString(L"hello, world!");
根據以上的代碼,讀者可能會猜到,VARIANT的定義可能類似於如下:
1. struct VARIANT
2. {
3. VARTYPE vt; //數據類型
4. union
5. {
6. LONG lVal; //VT_I4
7. VARIANT_BOOL boolVal //VT_BOOL
8. BSTR bstrVal; //VT_BSTR
9. }
10. };
實際上,VARIANT的定義就是這樣的!只不過由於它需要支持的類型太多,所以它包含的聯合成員會更多。限於篇幅,在此不再附出。
VARIANT支持的類型,也就是vt成員的取值如表所示。
[cpp]