看板 C_and_CPP 關於我們 聯絡資訊
最近需要實作一些泛型演算法,介面長得像這樣: template< typename T > class Algo { public: static void call( /* ... */ ) { // large part } private: Algo() { // blah blah } }; 總之裡面可能會出現很多實作細節才會用到的東西 像是 inner class 之類的 但礙於 template 沒辦法分開編譯,想藏也不知從何藏起 ... 不知各位有無好辦法? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 175.96.117.192
loveme00835:使用置入式模型(Inclusion model) 05/01 00:47
legnaleurc:目前我找到的兩個方法,一個是 export (顯然不可行) 05/01 01:01
legnaleurc:另一個是手動具現化 ... 但這方法也不好啊 orz 05/01 01:01
loveme00835:把實作寫到別的 .h 檔, 然後在 Algo 規格中間引入該 05/01 01:03
loveme00835:實作檔 05/01 01:03
legnaleurc:可是 client include 時還是會全部展開吧? 05/01 01:07
loveme00835:隱藏實作的目的本來就是"你不需要知道"而不是"你絕不 05/01 01:10
loveme00835:能知道"阿 XD 05/01 01:10
legnaleurc:這樣跟直接寫在 header 裡沒什麼不同吧 05/01 01:22
legnaleurc:pimpl 包裝過後的東西的確是"你絕不會知道" 05/01 01:23
legnaleurc:嗯 ... 我後來想想,linker 那一關實在太難過了 05/01 01:23
loveme00835:pimpl 包裝起來的目的是"你不需要知道", 因為一但你知 05/01 01:26
loveme00835:到的太多, 會讓相依性變大, 實作端反而沒有多大的修改 05/01 01:27
loveme00835:空間. 跟直接寫沒什麼不同, 但 export 你也不能用了 05/01 01:28
holymars:大部份的template library都會有detail這個資料夾.. 06/02 17:55
holymars:裡面放的就是實作 像那種純header的library根本就無法不 06/02 17:55
holymars:讓使用者知道實作啊XD 隱藏實作是為了簡化閱讀 06/02 17:56
holymars:不是為了不讓使用者惡搞你 06/02 17:56
holymars:糟糕,我覺得我上面的文法好奇怪XD 06/02 17:56