我想問下類别範本特化能解決什麼問題?

2025-02-16 00:25:12 字數 3587 閱讀 4365

1樓:網友

其實和函式模板的特化差不多, 就是你的類别範本只能對一般的資料型別其作用。 但是對於特殊型別, 比如說指標, 其拷貝就和基本資料型別不同。 這是為了處理這種特殊情況就需要類别範本特化, 用於處理特定型別的特殊情況。

2樓:匿名使用者

自己對比下兩個簡單的例子就知道模板的好處了。

#include

int abs ( int x )

long abs ( long x )

float abs ( float x )double abs ( double x )void main (

int a = 96 ; long b = 78 ;

float c = ; double d = ;

cout #include

template < typename t >t abs ( t x )

void main (

int a = 96 ; long b = 78 ;

float c = ; double d = ;

cout<< a|=」abs (a)

關於類别範本特化的問題

3樓:德克and德華

「特化過程中試過定義建構函式」

什麼叫做「特化過程」?特化就那麼一瞬間的事,傳引數給它就馬上特化了,你怎麼能在這個過程「定義建構函式」?

如果可以的話,你可以把**貼出,根據你的表述根本不知道你現在的是什麼情況。

c++template模板特化問題

4樓:網友

模板編譯的特點就是你沒有用到的**永遠不會編譯。

但模板特化例外。特化會將你所指定的型別的模板按照你指定的方式編譯。

由於你沒有呼叫stack的pop或top函式。所以你stack的關於out_of_rangs的拼寫錯誤根本沒有編譯。也就沒有編譯錯誤。

但stack的特化確是需要編譯的。所以有編譯錯誤。

修改為out_of_range就好了。

5樓:

你沒有過載運算子:

和==使用模板進行push...這類操作是要比較運算子的。

6樓:清影星河

這個與你特不特化無關,是c++模板的編譯機制使你的問題暴露了不信你在 main() 中加一句。

試試看,報的是不是同乙個錯誤?

所以,問題是。

std::out_of_range

不是std::out_of_rangs

具體原因,請參考c++模板例項化機制機制,兩階段例項化原理。

c++的類别範本,函式模板 的 「偏特化」、「全特化」是什麼意思呢

7樓:網友

模板為什麼要特化,因為編譯器認為,對於特定的型別,如果你能對某一功能更好的實現,那麼就該聽你的。

模板分為類别範本與函式模板,特化分為全特化與偏特化。全特化就是限定死模板實現的具體型別,偏特化就是如果這個模板有多個型別,那麼只限定其中的一部分。

先看類别範本:

cpp]template

class test

至於為什麼函式不能偏特化,似乎不是因為語言實現不了,而是因為偏特化的功能可以通過函式的過載完成。

vc 6.0模板類特化問題

8樓:網友

最簡單的辦法,把a換成實際型別。

c++模板特化的問題

9樓:網友

提供一種可能的解決方法,類似於operator++ 的實現。

t& operator(const int &)t& operator(const int &,int=0);

10樓:網友

函式模板與同名的非模板函式的過載方法均遵循的約定:

1)尋找乙個引數完全匹配的普通函式, 如果找到了就呼叫它。

2)在(1)失敗後, 尋找乙個函式模板, 使其例項化, 產生乙個匹配的模板函式, 若找到了,就呼叫它。

3)在(1)(2)均失敗後, 再試一試低一級的對函式的過載方法,例如通過型別轉換可產生引數匹配等, 若找到了,就呼叫它。

4)若(1)(2)(3)均失敗, 則這是乙個錯誤的呼叫。

理論上講,在候選呼叫存在二義性的情況下,會從可行函式集中優先選擇適用的普通函式。

現在編譯通不過了,表明是呼叫必須例項化模板函式,而這裡樓主給的都是需要例項化的模板函式,一旦呼叫,必進行例項化,就會產生二義性。

我建議樓主改成帶兩個引數的模板,這樣只需要乙個模板函式就搞定了,既適合型別不同的又適合相同的,不會有二義性的問題了。

templateclass abc;

樓主:你既然是定義的是兩個引數的模板template

那為什麼要定義兩個模板函式:

public:

t &operator(const int &)

t &operator(const t &)

而不用乙個:

t1 &operator(const t2 &)

11樓:網友

樓主。你說的不是很對的呢。

我就編譯過了。dev c++和都編譯過了。

如何解決呢。我還是沒有解決。

c++模板顯式特化的理解問題

12樓:清影星河

既然你最不理解那個。

template <>void swap(job &,job &)

template <>void swap(job &,job &)

這是語法的規定,全特化不得隱瞞任何型別資訊,得完整地包括模板的特化型別,特化型別引數的個數,順序。

上面兩個例子,是兩個模板的全特化,如果隱瞞了這個,編譯器就傻眼了,因為編譯器不知道模板有幾個t,如:

template

c++模板特化問題。

13樓:網友

#include

#include

#include

using namespace std;

template

int main()

const char * str = "wang"; //定義乙個const char *變數來代表常量字串。

std::cout<}你可以在函式模版和特化版本里新增cout來看呼叫哪個。現在呼叫的是特化版,你可以把它註釋掉,就會呼叫模版了。

14樓:網友

改成: int frequency(const char * const arr,int size,const char * const item)

另外,你這個根本就沒有用到模板,感覺有點畫蛇添足。

template 偏特化的問題

15樓:勵若

是原來stl的**就編譯不過呢,還是你自己寫了乙個版本編譯不過?

你是用什麼編譯器?

有的編譯器不支援偏特化也正常。

我想問下這是什麼車以前沒見過,我想問下這是什麼車 以前沒見過

這個是在國慶的時候還是什麼時間 這種多用途城市越野很少見的 看看就好了羨慕不來的 這類車統稱為裝甲車。用途很廣,運輸 防暴 巡邏 偵查等等。下面給你介紹幾款裝甲車 tpz 1 狐狸 裝甲人員運輸車是在1964年,聯邦德國陸軍提出發展戰後第二代中噸位 3.5 10噸 輪式車輛的要求下產生。驅動型式包括...

我想問下為什麼我的硬碟會壞掉,我想問下為什麼我的硬碟會壞掉

任何硬體都是有壽命的,硬碟也一樣,隨著不斷讀寫磁頭磁碟表面磁性質都回老化,原因在於每次寫入都要對磁碟表面磁性物質進行重新排列,而磁碟本身允許的重排次數是有限的.另外其他機械零件也會在使用中磨損.一般硬碟壽命一天8小時,3年左右都屬於正常。合理使用只能延長壽命,不能保證永遠不出故障。你這都08年的舊硬...

什麼是三消類遊戲,想問下三消是什麼遊戲

三個相同的圖案連在一起可以消去,叫三消遊戲。三消類遊戲就是三個同樣的東西放在一起 更多的東西 寶石狂人就是一個三消類遊戲。消防 火的快死的快,伺服器爛 消毒 玩的多毒得深,某地方殘 消協 投訴無門,某地方疼 消費金錢,消耗時間,消遣心情 三個相同的圖案連在一起可以消去,叫三消遊戲。比如 開心消消樂 ...