C 學習筆記60 模板編譯模型

2021-07-11 12:59:10 字數 1315 閱讀 8340

只說包含模型吧。高大上的分離模型,編譯器支援不好,雖然是標準中明文規定的。詳見:

檔案組織形式如下:

現在假設共有3個檔案,friend.cpp實現模板函式定義;friend.h實現模板函式宣告;main.c實現函式呼叫。

// friend.cpp檔案

// 注意這裡沒有標頭檔案包含

templateint compare(const t &v1, const t &v2)

// friend.h檔案

#pragma once

using namespace std;

template int compare(const t&, const t&);

#include "friend.cpp" //注意包含的位置

// main.cpp

#include "friend.h"

int main()

形式2其實是形式1的變種,但是更加明智。它將模板函式或者類模板的成員函式的實現放在標頭檔案中進行。

以stack類模板為例,共有3個檔案:

stack.h,實現類模板的定義體

stackdef.h實現類模板的成員函式,事實上也是定義模板函式;

主函式,使用類模板

// stack.h檔案

#pragma once

#include #include #include using namespace std;

//宣告類模板

template class stack

;

檔案

#include "stack.h"

// template stack的成員函式

templatestack::stack()

templatestack::stack(vector& t_vec)

template void stack::push(t const& t)

template void stack::pop()

else }

template t stack::top() const

return elems.back(); //vector的末端就是堆疊的頂端

}

檔案

#include "stackdef.h"

int main()

C 模板編譯模型

編譯器只有在用到模板時,如呼叫了函式模板或呼叫了類模板的物件的時候,編譯器才產生特定型別的模板例項。編譯時,模板與普通函式 類的區別 標準 c 編譯模板 的兩種模型 包含編譯 分別編譯 相同點 構造程式的方式相同 類定義和函式宣告放在標頭檔案中,而函式定義和成員定義放在原始檔中。不同點 編譯器怎樣使...

c 模板編譯

如何組織編寫模板程式 前言 常遇到詢問使用模板到底是否容易的問題,我的回答是 模板的使用是容易的,但組織編寫卻不容易 看看我們幾乎每天都能遇到的模板類吧,如stl,atl,wtl,以及boost的模板類,都能體會到這樣的滋味 介面簡單,操作複雜。我在5年前開始使用模板,那時我看到了mfc的容器類。直...

C 物件模型學習筆記

c 物件模型 1.簡單物件模型 為了降低c 編譯器的設計複雜度,在簡單模型中,乙個object是一系列的slots,按照members宣告次序,每乙個 data member或function member都有乙個slot.在簡單物件模型中,members本身並不放在object中,只有 指向mem...