C 模板 34 類模板中成員函式的建立時機

2021-10-08 02:01:11 字數 1146 閱讀 4085

這篇來學習下類模板中普通函式的建立時機。如果是普通的類的成員函式,在類的例項化物件建立過程中就可以建立成員函式。但是在類模板中,成員函式是不會裡面建立。因為這裡t這個型別如果沒有被確定,成員函式是無法建立的,而是這個成員函式在呼叫的時候才被建立。下面使用**來證明這個結論。

類模板中,成員函式是在被呼叫的時候才建立

**如下

#include #include using namespace std;

class person1

};class person2

};//類模板

template class myclass

void fun2()

};int main()

這段**是編譯是沒有問題,不會報錯。來看看這個類模板myclass中有兩個成員函式,第乙個showperson1() 乙個showperson2(). 但是物件obj 是t,還沒有被確定是person1物件還是person2物件,所以當前在編譯階段這兩個成員函式都沒有報錯。

接下來,如果我們在test01()中,確定t的型別是person1,但是我們也想要呼叫showperson2()這個成員函式,這個時候就會編譯報錯。

#include #include using namespace std;

class person1

};class person2

};//類模板

template class myclass

void fun2()

};void test01()

int main()

報錯內容如下(在vs code軟體下截圖)

字面意思是,person1這個類沒有showperson2這個成員函式,原因就是我們在test01中建立的m這個物件,已經確定是按照person1這個類的型別建立,在50行我們就不能呼叫fun2()這個方法,登出這個方法就可以編譯執行。

同理,如果在test01()函式中,我們建立類模板物件,引數確定是person2型別的話,第49行m.fun1()也會報類似的錯誤。

C 中的模板(類模板 模板類 模板函式)

1 class 一般class用於定義類,在模板引入c 後,最初定義模板的方法為 template,這裡class關鍵字表明t是乙個型別 2 typename 為了避免class在這兩個地方的使用可能給人帶來混淆,所以引入了typename這個關鍵字,它的作用同class一樣表明後面的符號為乙個型別...

c 模板類如何定義模板成員函式

最近跟網上乙個解決乙個模板問題 其實他在用g 編譯器寫模板定義成員函式,我在vs 05的c 編譯器上寫,然後我測試模板的結果是 特例模板不可以在類外定義,不管是在標頭檔案還是cpp檔案都要報錯,然後跟他說讓他寫在類中 當時不知道他在用g 編譯器 於是悲劇的問題出來了 他那個老是報沒在未命名空間類域中...

C 類模板的成員函式模板寫法

這幾天本來想將lua tinker移植到linux上去的,但是由於vc中的模板寫法與gcc中的模板寫法有些不同之處,比如下面一段 struct pop template static char invoke lua state l,int index template static const ch...