亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么模板類的實現和聲明應該位于同一個頭文件中?

為什么模板類的實現和聲明應該位于同一個頭文件中?

C++
慕桂英4014372 2019-06-17 16:24:24
為什么模板類的實現和聲明應該位于同一個頭文件中?為什么模板類的實現和聲明應該位于同一個頭文件中?你們誰能以身作則解釋一下?
查看完整描述

3 回答

?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

編譯器需要訪問整個模板定義(而不僅僅是簽名),以便為模板的每個實例化生成代碼,因此需要將函數的定義移動到標頭。

欲知更多詳情,請閱讀包含模型.


查看完整回答
反對 回復 2019-06-17
?
蝴蝶刀刀

TA貢獻1801條經驗 獲得超8個贊

他們沒必要這么做。

需要的是模板定義在實例化點(使用它的地方)可見,這樣編譯器就可以在此時從模板派生類/函數。

但是,對于模板類使用兩個頭文件是非常常見的:

// foo_fwd.hpptemplate <typename T, typename U> struct Foo;// foo.hpp#include "foo_fwd.hpp"template <typename T, typename U> struct Foo 
{ typedef std::pair<T,U> type; };

這允許那些不需要完整模板定義的人包含一個稍微輕一些的標頭,例如:

//is_foo.hpp#include <boost/mpl/bool.hpp>#include "foo_fwd.hpp"template <typename Z>struct is_foo: boost::mpl::false_ {};
template <typename T, typename U>struct is_foo< Foo<T,U> >: boost::mpl::true_ {};

它可以加快編譯時間。


查看完整回答
反對 回復 2019-06-17
  • 3 回答
  • 0 關注
  • 1239 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號