[问题] template特化 link的问题

楼主: lovejomi (JOMI)   2020-06-16 00:25:18
标题下的很不好...
我不太知道怎么描述这问题
尝试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可以不需要看到宣告 就能找到定义
(全特化是这样, 偏特化我猜也是)
请顺便给我一些关键字
谢谢
作者: loveme00835 (发箍)   2020-06-16 01:55:00
https://bit.ly/2Y4Z6I0你不同的 translation unit 都有实体, 只是谁会盖掉谁是未定义的
楼主: lovejomi (JOMI)   2020-06-16 10:11:00
https://ideone.com/g3oRzg 还是不是很清楚这范例会有这error 但我的case他根本也没看到main.cpp的特化 宣告, 为什么却可以自己去找定义?https://wandbox.org/permlink/VlRLdsCLbQm54U1L刻意放在呼叫的后面定义...却还是可以 跟ideone的搞混了

Links booklink

Contact Us: admin [ a t ] ucptt.com