您可以使用nm
程序(binutils的一部分)來查看程序使用的符號列表。例如:
$ g++ test.cc -o test
$ nm test | grep GetMax
00002ef0 T __Z6GetMaxIiET_S0_S0_
00002f5c T __Z6GetMaxIiET_S0_S0_.eh
00002f17 T __Z6GetMaxIlET_S0_S0_
00002f80 T __Z6GetMaxIlET_S0_S0_.eh
我不知道爲什麼每個人都有兩個副本,一個具有.eh
後綴,但除此之外,你可以說這個特定的功能被實例化兩次。如果你的nm
版本支持-C/--demangle
標誌,你可以用它來獲取可讀的名稱:
$ nm --demangle test | grep GetMax
00002ef0 T int GetMax<int>(int, int)
00002f5c T _Z6GetMaxIiET_S0_S0_.eh
00002f17 T long GetMax<long>(long, long)
00002f80 T _Z6GetMaxIlET_S0_S0_.eh
如果不支持該選項,您可以使用c++filt
來還原函數他們:
$ nm test | grep GetMax | c++filt
00002ef0 T int GetMax<int>(int, int)
00002f5c T __Z6GetMaxIiET_S0_S0_.eh
00002f17 T long GetMax<long>(long, long)
00002f80 T __Z6GetMaxIlET_S0_S0_.eh
所以,你可以看到GetMax
分別用int
和long
實例化。
我平時儘量不要從編輯預期的內容,但如果你給老鼠一塊餅乾。雖然,諷刺的是,我離開了語法,我無法忍受,這是「CPP」標籤(意思是「C預處理器「,而不是」C++「),提示編輯;但最大的變化是使用「實例化」,這是標準用於「生成」這些術語的術語。 – 2010-01-04 02:37:12
感謝羅傑的評論。我會按照你的提示。 – 2010-01-04 04:10:13