2011-10-01 23 views

回答

3

C++ 98引入了export關鍵字它允許您在另一個翻譯單位函數模板的定義,只有其聲明編譯使用它的代碼需要。 (如果你對什麼是定義和聲明有疑問,請參閱here。基本上,你可以在另一個翻譯單元中使用函數模板實現)。這就和其他函數一樣。

但是,只有使用EDG的編譯器前端的編譯器才支持它,並不是所有的編譯器都正式支持它。事實上,我知道的唯一一個正式支持它的編譯器是Comeau C++。這就是爲什麼不幸,關鍵字被從C++ 11中刪除的原因。

我認爲可以肯定地說,一個合適的模塊系統可以治癒整個編譯模型中包含的許多缺點,但是,不幸的是,一個模塊系統不被認爲是可以解決的問題在C++ 11的合理時間內。我們將不得不希望下一個版本的標準。

+1

爲什麼「不幸」?即使這個特徵的作者也認爲它的設計和規定很差,並且會有更好的方法來處理這個問題。 –

+2

@Ben:儘管存在一些缺點,但它確實刪除了重新編譯整個項目的必要性,因爲一個輔助模板發生了變化,它只被一個輔助模板使用,而這個輔助模板只能被一個包含在任何地方的模板使用。至少,Daveed Vandervorde(實施它)說,它的確提供了這個功能。當時我正在爲一家剛剛爲[IncrediBuild](http://www.xoreax.com/visual_studio.htm)花費五位數的公司工作,爲了讓我們再次獲得高生產力,儘管所有幫助者幾個MLoC項目中的輔助模板。 '出口'會更便宜。 – sbi

+0

depracated?我認爲這是平坦的刪除。其中一件事實際上不會破壞任何現有的代碼。 –

0

單獨編譯的模板是您可以從另一個翻譯單元引入模板定義的地方,而不必在每個TU(通常在標題中)中定義它們。

基本上,他們被忽略,因爲他們幾乎不可能在複雜性方面實施,並帶來一些不幸的副作用。

+0

我認爲任何工作實現都需要額外的永久文件寫入構建目錄,所以這真的是一個相當侵入性的功能。幸運的是,它現在消失了。 –

+0

恩,我似乎記得Borland C++ 3有單獨的模板編譯。那大概是20年前。 – sbi