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