模板初學者指南2 (轉)

worldblog發表於2007-12-12
模板初學者指南2 (轉)[@more@]

模板初學者指南2

原文:">

 

過載模板

:namespace prefix = o ns = "urn:schemas--com::office" />

函式模板

函式模板可以被其他的函式模板或是其他函式。將遍歷所有可能的函式模板並將建立相應的模板函式。查詢使用最優匹配策略。

在模板中使用友元和其他模板

模板類可以包含其他的模板或是類,也可以使用其他類作為友元。當一個模板類包含另外的類時,有下面兩種可能:

內部的類可以是一個通常的類。內部類獨立於模板引數。否則內部類為另外一個模板。

外部模板類包含另外一個獨立的模板(也獨立於模板引數)。

template < class ElemType >

class Tree

{

//...

public:

  class Node

  {

  friend Tree < ElemType >;

  //...

  };

};

此例子中,內部模板類Node獨立於Tree。外部類定義為Node的友元,包含引數列表。

模板型別

當使用在模板引數中定義的型別時,應該使用typename來定義:

template < typename T >

class X

{

//...

  typename T::X theStuff; // T::X is the type

  //...

};

class Test

{

//...

  class X { /* ... */ };

};

不使用typename,編譯器報錯。

列舉模板

當使用列舉模板時,可以建立一個產生的通用的類。提供一個列舉函式來分配。此列舉函式可以使用模板列舉函式來實現。可以使用任意型別:

class Builder

{

//...

  template < class T > static T* allocateMem();

};

注意:模板列舉函式不能為 virtual.

End


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章