機(jī)內(nèi)碼高位字節(jié)=(區(qū)號(hào))H+A0H
機(jī)內(nèi)碼低位字節(jié)=(位號(hào))H+A0H
例子:
string str = "陳"; // 機(jī)內(nèi)碼存儲(chǔ),占兩個(gè)字節(jié)
unsigned char ucHigh = (unsigned char)strText[0]; // 獲取機(jī)內(nèi)碼高字節(jié) ucHigh = 179
unsigned char ucLow = (unsigned char)strText[1]; // 獲取機(jī)內(nèi)碼低字節(jié) ucLow = 194
unsigned int uCode = (ucHigh - 0xA0) * 100 + ucLow - 0xA0; // 區(qū)位碼 uCode = (179 - 160) * 100 + 194 - 160 = 1934;
接下來(lái)就是根據(jù)區(qū)位碼 1934 找到對(duì)應(yīng)的拼音,怎么找呢?看源碼吧。
例:
tempalte <typename T>
T GetMax(T a, T b)
{
return a < b ? b : a;
}
/// 重載
tempalte <typename T>
T GetMax(T a, T b, T c)
{
return (c < GetMax(a, b) ? GetMax(a, b) : c);
}
/// 默認(rèn)類(lèi)型
template <typename T=int>
T GetMax(T a, T b)
{
retrun a < b ? b : a;
}
2、Class Templates(類(lèi)模版)
例:
template <typename T>
class MyStack
{
friend class CFriend1; // 普通友元類(lèi)不需要先申明
friend class CFriend2<T>; // error, 友元模板類(lèi)必須先申明
public:
void Push(T const&);
void Pop();
T Top() const;
bool Empty() const;
private:
std::vector<T> elems;
};
void MyStack<T>::Push(T const& e)
{
elems.push_back(e);
}
/// 繼承
template <typename T>
class Derived : public MyStack<T>
{
public:
void Test()
{
Top(); // 應(yīng)該使用this->Top() 或 MyStack<T>::Top(), 否則就調(diào)用外部Top(),或者編譯錯(cuò)誤
}
/// 成員模版函數(shù),不能是virtual
template <typename T2>
void Test2()
{
}
};
3、NonType Templates(非類(lèi)型模版參數(shù))
局限性:通常只能是常數(shù)整數(shù)(包括enum)和指向局部變量的指針。
例:
template <typename T, int MAXSIZE>
struct NonTypeStruct
{
T elems[MAXSIZE];
};
4、typename 關(guān)鍵字
typename是在C++標(biāo)準(zhǔn)化工程中被引入的,目的是向編譯器說(shuō)明template內(nèi)部的某個(gè)表示符號(hào)是個(gè)類(lèi)型。
例:
template<typename T>
struct MyStruct
{
typename T::SubType* m_Ptr; // 表示m_Ptr是指向SubType是T內(nèi)部類(lèi)型的一個(gè)指針,若沒(méi)有typename,就表
示T的靜態(tài)變量SubType乘以m_Ptr。
};
5、雙重模版參數(shù)
例:
template <typename T, template <typename> class CT>
class DoubleTemplate
{
CT<t> m_ct;
};
DoubleTemplate<int, std::vector> dbTemplate; // 類(lèi)中定義了一個(gè)vector<int>的成員屬性m_ct;
6、模板的申明和定義必須在同一個(gè)文檔中,否則會(huì)出現(xiàn)連接錯(cuò)誤
例:
// Test.h
template <typename T>
T Max(T a);
// Test.cpp
template <typename T>
T Max(T a) { return a; }
// Main.cpp
#include "Test.h"
void main()
{
int a = Max<int>(1); // error LNK2019,除非同時(shí) #inclde "test.cpp"
}
7、模版類(lèi)不能和其它不同類(lèi)型的實(shí)體同名。
例:
int c;
class c; // ok,普通類(lèi)可以
template <typename T>
class c; // error,模板類(lèi)不行
8、在類(lèi)中聲明友元模版類(lèi)
例:
class Manager
{
template <typename T>
friend class Task;
};
9、看看小細(xì)節(jié)
例:
template <bool b>
class Invert
{
public:
static bool const result = !b;
};
bool bTest = Invert<(1>0)>::result; // (1>0)小括號(hào)必須存在
std::vector<std::list<int> > vectList; // <std::list<int> >空格必須存在