2011-08-03 97 views
0

我有一個包含模板方法和非模板參數的類。代碼的大小非常大,所以我試圖通過將它放入.cpp文件來避免內聯。但我只能設法實例化它爲每個非類型參數明確。隱式模板方法實例

隱式實例化可能嗎?它會是什麼樣子?在其他相關的問題,這個環節http://www.parashift.com/c++-faq-lite/templates.html提供,但我不能找到隱式實例化的解決方案(如果有這樣的事情)...

class Example 
{ 
    public: 
    template<enumExample T_ENUM> void Foo(void); 
}; 

我得到鏈接錯誤,Foo的(無法解析的外部符號)當使用它。

+0

'代碼大小真的很大'意味着二進制大小? – iammilind

+0

「所以我試圖通過將它放入.cpp文件中避免內聯」 - 大概是的。 –

+0

@iammilind,是的,它意味着二進制大小。這個方法並不是那麼簡單,我稱之爲兩次以上。 – Mirco

回答

1

對於隱式實例化,編譯器需要查看函數模板的實現。通常這意味着實現需要位於頭文件中。如果你只是想避免內聯,你可以嘗試在頭文件中寫入函數模板的實現,但在類聲明之外(儘管我不確定內聯是你真正的問題)。

2

你的問題是模板代碼需要在實例化的時候可見。見C++ FAQ 35.13

這基本上意味着你不能做你想做的事情。有一個導出關鍵字使得這成爲可能,但它的支持很差,我相信已經從C++ 0x中的標準中刪除。有關更多信息,請參閱C++ FAQ 35.14

+0

它實際上已經從即將到來的標準中刪除。唯一以當前標準實施它的供應商推動拆除,因此在那裏達成協議是有好的基礎的。 –

0

爲了減少代碼大小,您可以嘗試通過在適當的時候實現pimpl idiom來減少依賴關係。