作者lovejomi (JOMI)
看板C_and_CPP
标题[问题] template特化 link的问题
时间Tue Jun 16 00:25:18 2020
标题下的很不好...
我不太知道怎麽描述这问题
尝试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://webptt.com/cn.aspx?n=bbs/C_and_CPP/M.1592238320.A.88D.html
2F:→ loveme00835: 你不同的 translation unit 都有实体, 只是谁会盖掉 06/16 01:57
3F:→ loveme00835: 谁是未定义的 06/16 01:57
5F:→ lovejomi: 这范例会有这error 但我的case他根本也没看到main.cpp的 06/16 10:11
6F:→ lovejomi: 特化 宣告, 为什麽却可以自己去找定义? 06/16 10:12
8F:→ lovejomi: 刻意放在呼叫的後面定义...却还是可以 跟ideone的搞混了 06/16 10:17