Point<float>::Status s; 合法,Point::Status s; 錯誤。Point<float> *ptr = 0; 無需具現化成員;Point<float> &ref = 0; 會產生臨時物件觸發具現化。涉及 template 參數的型別檢查延遲至具現化時:
template <class T> class Mumble {
Mumble(T t = 1024) : _t(t) { if (tt != t) throw ex; }
T tt;
};
Mumble<int> mi; // OK
Mumble<int*> pmi; // 錯誤:1024 不能指定給指標
foo(_val),_val 為 int) 在定義時決議。foo(_member),_member 型別取決於 T) 在具現化時決議。手動顯式具現化至獨立目標檔為唯一高效做法。
dynamic_cast 執行期檢查型別,安全轉型回傳指標,失敗回傳 0。type_info (vptr[0])、比較型別描述子。bad_cast 異常。typeid 可先檢查型別再轉型。