[计算机科学经

1 generic code templatetypename t class array private

Info iconThis preview shows page 1. Sign up to view the full content.

View Full Document Right Arrow Icon
This is the end of the preview. Sign up to access the rest of the document.

Unformatted text preview: myfirst.hpp" // template 的實作碼/定義式 template <typename T> void print_typeof (T const& x) { std::cout << typeid(x).name() << std::endl; } 這個例子使用 typeid 運算子,把參數的型別以字串形式列印出來(見 5.6 節, p.58)。 此後,我們又在另外㆒個 .C 檔案使用這個 template,並將 template 宣告式(的所在檔案)以 #include 包含進來: // basics/myfirstmain.cpp #include "myfirst.hpp" // 使用含入之 template int main() { C++ Templates - The Complete Guide 6.1 置入式模型(Inclusion Model) 63 double ice = 3.0; print_typeof(ice); // 以 double 值呼叫 function template } 大多數 C++ 編譯器都可以正確編譯㆖述程式碼,然而大多數聯結器會報告㆒個錯誤,表示無法 找到 print_typeof()函式的定義。 錯誤的原因在於, function template print_typeof() 的定義並沒有被具現化。為了具現化㆒個 template,編譯器必須知道「以哪㆒份定義式」以及「以哪些 template arguments」對它具現化。 不幸的是先前這個例子㆗,這兩項資訊被分置於兩個分開編譯的檔案。因此當編譯器看到對 print_typeof()的呼叫時,看不到其定義,無法以 double 型別來具現化 print_typeof()。 於是編譯器假設這個 template 的定義位於其他某處...
View Full Document

Ask a homework question - tutors are online