[問題] template特化 link的問題

看板C_and_CPP作者 (JOMI)時間4年前 (2020/06/16 00:25), 編輯推噓0(008)
留言8則, 2人參與, 4年前最新討論串1/1
標題下的很不好... 我不太知道怎麼描述這問題 嘗試google 沒有辦法找到答案 關鍵字 "template specialization" + "ODR" 或 "link" 之類的 https://wandbox.org/permlink/MBRv5lz1Bsz20ynW 問題出現在 main.cpp 這邊有全特化 一個class和 一個 function q.h 是 原版template class和function的定義 我刻意在q.cpp 呼叫 Serialize<Foo>(); 這行 Serialize<Foo>(); 我原本預期他根本不知道main.cpp有特化他 所以要走 原版q.h的code 沒想到他走特化版本... 這行為我真沒辦法理解 (但我認為就因為這樣才能做到 擴充Serialize 自訂type的方法) 請各位解釋這邊是什麼概念 讓q.cpp可以不需要看到宣告 就能找到定義 (全特化是這樣, 偏特化我猜也是) 請順便給我一些關鍵字 謝謝 -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 39.12.193.155 (臺灣) ※ 文章網址: https://www.ptt.cc/bbs/C_and_CPP/M.1592238320.A.88D.html

06/16 01:55, 4年前 , 1F
06/16 01:55, 1F

06/16 01:57, 4年前 , 2F
你不同的 translation unit 都有實體, 只是誰會蓋掉
06/16 01:57, 2F

06/16 01:57, 4年前 , 3F
誰是未定義的
06/16 01:57, 3F

06/16 10:11, 4年前 , 4F
https://ideone.com/g3oRzg 還是不是很清楚
06/16 10:11, 4F

06/16 10:11, 4年前 , 5F
這範例會有這error 但我的case他根本也沒看到main.cpp的
06/16 10:11, 5F

06/16 10:12, 4年前 , 6F
特化 宣告, 為什麼卻可以自己去找定義?
06/16 10:12, 6F

06/16 10:16, 4年前 , 7F

06/16 10:17, 4年前 , 8F
刻意放在呼叫的後面定義...卻還是可以 跟ideone的搞混了
06/16 10:17, 8F
文章代碼(AID): #1Uvw3mYD (C_and_CPP)