STL提取引數模版的型別

2021-07-14 07:30:24 字數 765 閱讀 6849

一、解決的問題

1、其實是可以推導出函式的返回值型別的:

但是是無法在模版類的外面進行使用的

下面的兩種情況是編譯通過的:

(1)

templatet print(t x)

(2)

templatestruct a

};

2、解決t無法在類模版的外面進行使用的問題

例如:函式定義:

templatestruct b

typedef t valuetype;

t& operator*()

t _a;

};templatetypename t::valuetype fun1(t value)

測試用例:

void test()

{ bb1(10);

cout<

定義了乙個模版的函式,這個時候你傳入的引數又是乙個模版,這個時候怎麼使用這個引數模版中的對應的型別,這個時候就可以使用,這個技術:

在引數模版的裡面定義乙個typededf t valuetype(一定要定義為public的為什麼,自己思考),這個時候就可以使用 typename t::valuetype的方式拿到對應的型別,

為什麼要加typename,這是因為編譯器不知道這個valuetype到底是變數,還是對應的型別,加上typename之後,這個時候就告訴編譯器是乙個型別,這個時候就可以順利的同過編譯了

變長引數模版函式初探

最開始在寫乙個 命令模組,涉及到 簡單命令 和 復合命令。所有的命令 是通過字串組裝的。命令的呼叫是通過註冊機制 實現繫結的。具體的功能封裝在對應的 功能類裡面。由於復合命令的存在,會導致一條命令 執行多個處理。所以希望在 註冊的時候,能夠直接將多個物件直接儲存到乙個容器內。這就會涉及到 不定長引數...

C 非型別引數的模版實參

今天看見c 中關於類模版的定義有兩種,首先,類模版的定義和宣告都以關鍵字template開頭,後面接上以逗號分隔的模版參數列 template parameter list 模版參數列以 括起來,模版引數一種是型別引數 type parameter 另一種是非型別引數 nontype paramet...

函式模版和模版函式,類模版和模版類的區別

什麼是函式模板和類模板 函式模板是一種抽象函式定義,它代表一類同構函式。通過使用者提供的具體引數,c 編譯器在編譯時刻能夠將函式模板例項化,根據同乙個模板建立出不同的具體函式,這些函式之間的不同之處主要在於函式內部一些資料型別的不同,而由模板建立的函式的使用方法與一般函式的使用方法相同。函式模板的定...