我剛剛下載了STL源代碼,我發現STL模板類的所有定義都包含在.h文件中。函數定義的實際源代碼位於.h文件中,而不是.cpp/.c文件中。這是什麼原因?整個C++ STL代碼被包含在.h而不是.cpp/.c文件中的原因是什麼?
http://www.sgi.com/tech/stl/download.html
我剛剛下載了STL源代碼,我發現STL模板類的所有定義都包含在.h文件中。函數定義的實際源代碼位於.h文件中,而不是.cpp/.c文件中。這是什麼原因?整個C++ STL代碼被包含在.h而不是.cpp/.c文件中的原因是什麼?
http://www.sgi.com/tech/stl/download.html
因爲很少有編譯器實現連接的模板。這個很難(硬。
這裏有一個簡短但(我認爲),它內容豐富的文章:http://www.informit.com/guides/content.aspx?g=cplusplus&seqNum=53
我說「我想」,因爲這真的不是我很熟悉的莫過於它的廣泛未實現等。我最初說這個標準不需要它,但是在C++ 03中查看「export」的定義時,我沒有看到任何跡象表明它是可選的。也許這只是一個失敗的標準。
將模板視爲代碼生成。如果您事先不知道將使用哪種模板,則無法編譯。所以你需要在頭文件中保持實現。
這使得一些內聯和解釋了爲什麼有時使用模板化的東西(比如std ::排序)的作品比平原快C.
你忘記了(相當不幸)導出關鍵字。 – ChrisInEdmonton 2009-11-14 16:16:34
我認爲arlready之前的人給出了足夠的解釋和關於它的鏈接,它的不執行以及它的可能的未來;) – 2009-11-14 23:09:17
謝謝,只是有一天,我其實是想知道C++如何鏈接到模板! – 2009-11-14 03:23:50
導出是C++ 98標準的一部分,但正如你所說的,大多數編譯器不支持它(最後我檢查過,g ++團隊沒有興趣實現它)。 – 2009-11-14 03:44:58
非常感謝您 – Judeo 2009-11-14 03:47:44