1. 模板定義內(nèi)的自定義類型成員調(diào)用方法(用typename顯示說(shuō)明):類可以定義類型成員,如size_type, size_t等類型。在定義模板類時(shí)如何調(diào)用它呢?為了說(shuō)明是類型,顯示用typename說(shuō)明。
template<class cl, class T>
cl func(cl* cl_p, T value)
{
//cl::size_type * value; // If cl::size_type is a type, then a declaration
// If cl::size_type is an object, then a multiplication
typename cl::size_type *value;
}
2. 非類型模板形參的使用: 模板非類型形參是模板定義內(nèi)部的常量值.(在需要常量表達(dá)式的時(shí)候,可以用非類型形參,如定義數(shù)組的長(zhǎng)度)。
因?yàn)榉穷愋湍0逍螀⑿枰獋鬟f的是常量表達(dá)式,所以不支持一般的隱式類型轉(zhuǎn)換。
template<class T, size_t N> void fcn(T (&cl)[N]) {...}
int x[20];
fcn(x);
3. 模板何時(shí)實(shí)例化?函數(shù)聲明,定義對(duì)象的引用和指向?qū)ο蟮闹羔樁疾粫?huì)實(shí)例化。定義類對(duì)象或調(diào)用函數(shù)時(shí)實(shí)例化。
4.friend模板聲明依賴性:(1) 當(dāng)授予對(duì)給定模板所有實(shí)例的訪問(wèn)權(quán)時(shí),在作用域中不需要存在該類模板或函數(shù)模板的聲明。編譯器將友元聲明也當(dāng)作類或函數(shù)的聲明對(duì)待;(2)想要限制對(duì)特定實(shí)例化的友元關(guān)系時(shí),必須在可以用于友元聲明之前聲明類或函數(shù)。
5.對(duì)于不同參數(shù)的函數(shù)模板用相同參數(shù)可以調(diào)用么?可以,會(huì)調(diào)用隱式轉(zhuǎn)換。
#include<iostream>
using namespace std;
template<typename T1, typename T2>
void print(const T1 &v1, const T2 &v2) //參數(shù)類型不同
{
cout << "T1 = " << v1 <<endl;
cout << "T2 = " << v2 <<endl;
}
int main()
{
print(1,2); //ok
int a=1;
int b=2;
print(a,b); //ok,形參類型相同
return 0;
}

文章來(lái)源:http://liyuxia-life.spaces.live.com/Blog/cns!DA1B364675ACF35!266.entry