ÇÔ¼ö ÅÛÇø´Àº ¾îµð±îÁö³ª ÇÔ¼ö¸¦ ¸¸µé±â À§ÇÑ ÇüƲ¿¡ Áö³ªÁö ¾ÊÀ¸¸ç ±× ÀÚü°¡ ÇÔ¼öÀÎ °ÍÀº ¾Æ´Ï´Ù. ÄÄÆÄÀÏ·¯´Â ÇÔ¼ö ÅÛÇø´ Á¤Àǹ®À¸·ÎºÎÅÍ ¾ÕÀ¸·Î ¸¸µé¾îÁú ÇÔ¼öÀÇ ¸ð¾ç¸¸ ±â¾ïÇÏ¸ç ½ÇÁ¦ ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ŸÀÔ¿¡ ¸Â´Â ÇÔ¼ö¸¦ ÀÛ¼ºÇÑ´Ù. ÇÔ¼ö ÅÛÇø´À¸·ÎºÎÅÍ ÇÔ¼ö¸¦ ¸¸µå´Â °úÁ¤À» ±¸Ã¼È ¶Ç´Â ÀνºÅϽºÈ(Instantiation)¶ó°í Çϴµ¥ È£Ãâ¿¡ ÀÇÇØ ±¸Ã¼ÈµÇ¾î¾ß¸¸ ½ÇÁ¦ ÇÔ¼ö°¡ ¸¸µé¾îÁø´Ù. Á¸ÀçÇÏ´Â ¸ðµç ŸÀÔ¿¡ ´ëÇØ ÇÔ¼ö¸¦ ¹Ì¸® ¸¸µé¾î ³õ´Â °ÍÀÌ ¾Æ´Ï´Ù.
À̶§ ÇÔ¼ö ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁö´Â ÇÔ¼ö¸¦ ÅÛÇø´ ÇÔ¼ö¶ó°í ÇÑ´Ù. ¿ë¾î°¡ ºñ½ÁÇØ¼ ´Ù¼Ò Çò°¥¸®´Âµ¥ µÑ ´Ù µÚÂÊ¿¡ °¼¼¸¦ µÎ°í ÀÐÀ¸¸é ½Çü ÆÄ¾ÇÀÌ ½±´Ù. ÇÔ¼ö ÅÛÇø´Àº ÇÔ¼ö¸¦ ¸¸µé±â À§ÇÑ ÅÛÇø´À̰í ÅÛÇø´ ÇÔ¼ö´Â ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁö´Â ÇÔ¼öÀÌ´Ù. ¹è¿ Æ÷ÀÎÅÍ, Æ÷ÀÎÅÍ ¹è¿ µîÀÇ ¿ë¾îµµ ¸¶Âù°¡ÁöÀε¥ Çѱ¹¸»Àº ´ëü·Î µÚÂÊ ´Ü¾î¿¡ ÁøÂ¥ ¶æÀÌ ÀÖÀ¸¸ç ³¡±îÁö µé¾î ºÁ¾ß ¹«½¼ ¸»ÀÎÁö ¾Ë ¼ö ÀÖ´Ù. ¿ë¾î Áß°£¿¡ ¼¼ú¾î¸¦ ³Ö¾î¼ ÀÌÇØÇϸé Àß ¿Ü¿öÁø´Ù.
![]()
ÄÄÆÄÀÏ·¯°¡ ÅÛÇø´À¸·ÎºÎÅÍ ÇÔ¼ö¸¦ ±¸Ã¼È¸¦ ÇÏ´Â ¹æ¹ýÀº »ç¶÷ÀÇ ¸öÀ¸·Î ¶¼¿ì±â ÀÛÀü°ú »ç½Ç»ó µ¿ÀÏÇÏ´Ù. ¼Ò½º¸¦ ºÐ¼®ÇÏ´Â Áß°£ ´Ü°è¿¡¼ ÅÛÇø´ÀÇ Á¤ÀǸ¦ Àß ±â¾ïÇØ µÎ¾ú´Ù°¡ È£ÃâµÇ´Â ÇÔ¼öµéÀ» ÅÛÇø´À¸·ÎºÎÅÍ ÀÏÀÏÀÌ »ý¼ºÇØ ³½´Ù. È£ÃâºÎÀÇ Àμö¸¦ º¸°í ÁÖÀδÔÀÌ ¹» ¿øÇÏ´ÂÁö ¾Ë¾Æ³»¸ç ÅÛÇø´¿¡ ÀÌ Àç·á¸¦ Áý¾î ³Ö¾î ÇÔ¼ö¸¦ Âï¾î³»´Â °ÍÀÌ´Ù. »ç¶÷ÀÌ ÇØ¾ß ÇÒ Àâ´ÙÇÑ ÀÛ¾÷À» ÄÄÆÄÀÏ·¯°¡ ´ë½ÅÇÏ´Â °Í »ÓÀÌ´Ù.
¸¸¾à ÅÛÇø´¸¸ Á¤ÀÇÇϰí ÇÔ¼ö¸¦ È£ÃâÇÏÁö ¾ÊÀ¸¸é ¾Æ¹«·± Àϵµ ÀϾÁö ¾ÊÀ¸¸ç ÅÛÇø´ ÀÚü´Â ¸Þ¸ð¸®¸¦ ¼Ò¸ðÇÏÁö ¾Ê´Â´Ù. ¸¶Ä¡ ºØ¾î»§Æ²ÀÌ ºØ¾î»§ÀÌ ¾Æ´Ï¾î¼ ¸ÔÀ» ¼öµµ ¾ø°í Àç·á¸¦ ¼Ò¸ðÇÏÁö ¾Ê´Â °Í°ú ¸¶Âù°¡ÁöÀÌ´Ù. È£Ãâ¿¡ ÀÇÇØ ÅÛÇø´ÀÌ ±¸Ã¼ÈµÇ¾î ½ÇÁ¦ ÇÔ¼ö°¡ µÉ ¶§¸¸ ÇÁ·Î±×·¥ÀÇ Å©±â°¡ ´Ã¾î³´Ù. È£ÃâµÇÁöµµ ¾Ê´Â ÇÔ¼ö¸¦ ¸¸µé ÇÊ¿ä´Â ÀüÇô ¾ø´Â °ÍÀÌ´Ù. ÅÛÇø´¸¸ ¼±¾ðÇØ ³õ°í ºñÁÖ¾ó C++·Î ¸Ê ÆÄÀÏÀ» ¸¸µé¾î¼ È®ÀÎÇØ º¸¸é °ú¿¬ ±×·¸´Ù´Â °ÍÀ» È®ÀÎÇÒ ¼ö ÀÖ´Ù.
SwapTemp ¿¹Á¦¸¦ ÅëÇØ ÅÛÇø´ ÇÔ¼ö°¡ ±¸Ã¼ÈµÇ´Â °ÍÀ» È®ÀÎÇØ º¸ÀÚ. main¿¡¼ Á¤¼ö, ½Ç¼ö, ¹®ÀÚ, ±¸Á¶Ã¼ µî °¢°¢ÀÇ Å¸ÀÔÀ¸·Î Swap ÇÔ¼ö¸¦ È£ÃâÇϴµ¥ À̶§¸¶´Ù ÄÄÆÄÀÏ·¯´Â Swap ÇÔ¼ö ÅÛÇø´À» ÂüÁ¶ÇÏ¿© ½ÇÀμöÀÇ Å¸ÀÔ¿¡ ¸Â´Â ½ÇÁ¦ Swap ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÑ´Ù. ÀÌ ¿¹Á¦ÀÇ °æ¿ì ³×°¡Áö ¹öÀüÀÇ ÇÔ¼ö°¡ ±¸Ã¼ÈµÉ °ÍÀÌ´Ù.

¸Ê ÆÄÀÏÀ» ¸¸µé¾î È®ÀÎÇØ º¸¸é °ú¿¬ 4°³ÀÇ Swap ÇÔ¼ö°¡ ÀÛ¼ºµÇ¾î ÀÖÀ½À» ´«À¸·Î Á÷Á¢ È®ÀÎÇÒ ¼ö ÀÖ´Ù. ¸Ê ÆÄÀÏ(Map File)Àº ÇÔ¼ö³ª º¯¼ö°¡ ¾î´À ÁÖ¼Ò¿¡ ¹èÄ¡µÇ¾ú´ÂÁö¿¡ ´ëÇÑ ÀÏÁ¾ÀÇ ÄÄÆÄÀÏ °á°ú º¸°í¼Àε¥ ÇÁ·ÎÁ§Æ® ¼³Á¤ ÆäÀÌÁöÀÇ ¸µÅ© ÅÇ¿¡¼ ¿É¼ÇÀ» ¼±ÅÃÇϸé Debug µð·ºÅ丮¿¡ *.map ÆÄÀÏ·Î »ý¼ºµÈ´Ù. ¹°·Ð long, short, char *, float µîµî ´Ù¾çÇÑ Å¸ÀÔ¿¡ ´ëÇØ Swap ÇÔ¼ö¸¦ È£ÃâÇÏ¸é ´õ ¸¹Àº Swap ÇÔ¼öµéÀÌ »ý¼ºµÉ °ÍÀÌ´Ù.
0001:000001b0 ?Swap@@YAXAAH0@Z 004011b0 f i SwapTemp.obj
0001:00000200 ?Swap@@YAXAAN0@Z 00401200 f i SwapTemp.obj
0001:00000260 ?Swap@@YAXAAD0@Z 00401260 f i SwapTemp.obj
0001:000002b0 ?Swap@@YAXAAUtag_st@@0@Z 004012b0 f i SwapTemp.obj
ÄÄÆÄÀÏ·¯¿¡ ÀÇÇØ ±¸Ã¼ÈµÈ ÇÔ¼ö´Â ½ÇÇà ÆÄÀÏ¿¡ ½ÇÁ¦·Î Á¸ÀçÇϸç ÄÄÆÄÀÏ ´Ü°è¿¡¼ ¹Ì¸® ¸¸µé¾îÁö¹Ç·Î ½ÇÇà½ÃÀÇ ºÎ´ãÀº ÀüÇô ¾ø´Ù. ÇÔ¼ö°¡ È£ÃâµÉ ¶§ ¸¸µé¾îÁö´Â °ÍÀÌ ¾Æ´Ï´Ù. ´ë½Å ¸Å ŸÀÔ¸¶´Ù ÇÔ¼öµéÀÌ »õ·Î ¸¸µé¾îÁö¹Ç·Î ±¸Ã¼ÈµÇ´Â ¼ö¸¸Å ½ÇÇà ÆÄÀÏÀÇ ¿ë·®ÀÌ ´Ã¾î³´Ù. ÅÛÇø´Àº Å©±â¸¦ Æ÷±âÇÏ´Â ´ë½Å ¼Óµµ¸¦ ¾ò´Â ¹æ½ÄÀε¥ Å©±â¿Í ¼Óµµ´Â Ç×»ó ¹Ýºñ·Ê °ü°è¿¡ ÀÖ´Ù.
ŸÀÔ¸¸ ´Ù¸¥ ÇÔ¼öµéÀ» Á÷Á¢ º¹»çÇØ¼ Á¤ÀÇÇÏ´Â ¹æ¹ý°ú ÇÔ¼ö ÅÛÇø´À» Á¤ÀÇÇÑ ÈÄ ÄÄÆÄÀÏ·¯°¡ ±¸Ã¼ÈÇϵµ·Ï ÇÏ´Â °Í°ú´Â ¾î¶² Â÷ÀÌÁ¡ÀÌ ÀÖÀ»±î? ÀÏ´ÜÀº ¹Ýº¹µÇ´Â ºÎºÐÀÌ ÅëÇյǹǷΠ¼Ò½º ±æÀ̰¡ ª¾ÆÁö°í ¼öÁ¤ÇÒ Çʿ䰡 ÀÖÀ» ¶§ ÅÛÇø´¸¸ ¼öÁ¤ÇÏ¸é µÈ´Ù. µû¶ó¼ °ü¸®ÇÏ±â Æí¸®ÇØÁø´Ù´Â ÀÌÁ¡ÀÌ ÀÖÀ¸¸ç ÀÌÈÄ ÀÓÀÇÀÇ Å¸ÀÔ¿¡ ´ëÇÑ ÇÔ¼ö¸¦ »õ·Î ±¸Ã¼ÈÇÏ´Â °Íµµ ÄÄÆÄÀÏ·¯°¡ ¾Ë¾Æ¼ ÇϹǷΠȮÀ强µµ ÈξÀ ´õ ÁÁ´Ù.
´õ ÀÌ»ó »ç¿ëÇÏÁö ¾Ê´Â ÇÔ¼ö¸¦ »èÁ¦ÇÏ´Â °Íµµ ÄÄÆÄÀÏ·¯ÀÇ ¸òÀÌ´Ù. Swap(c, d) È£Ãâ¹®À» »èÁ¦Çϰí ÀçÄÄÆÄÀÏÇØ º¸¸é Swap(double, double) ÇÔ¼ö´Â ´Ù½Ã »ý¼ºµÇÁö ¾ÊÀ½À» È®ÀÎÇÒ ¼ö ÀÖ´Ù. ±×·¯³ª ÇÔ¼ö ÅÛÇø´À» ¾´´Ù°í ÇØ¼ ½ÇÇà ÆÄÀÏÀÇ Å©±â°¡ ÀÛ¾ÆÁö´Â °ÍÀº ¾Æ´ÔÀ» À¯ÀÇÇÏÀÚ. ±¸Ã¼ÈµÇ´Â ÇÔ¼öµéÀº °¢ÀÚ°¡ ¸Þ¸ð¸®¸¦ µû·Î Â÷ÁöÇϹǷΠ½ÇÇà ÆÄÀÏÀÇ Å©±â¸é¿¡¼´Â º°´Ù¸¥ ÀÌÁ¡ÀÌ ¾ø´Ù. º¹»çÇØ¼ ¼öÁ¤ÇÏ´Â ¹æ¹ý°ú ¶È°°ÀÌ ¸Þ¸ð¸®¸¦ Â÷ÁöÇÑ´Ù. ÀÌ·± ¸é¿¡¼ º¼ ¶§ ÅÛÇø´º¸´Ù´Â ¿ÀÈ÷·Á SwapVoid ¿¹Á¦ÀÇ ¹æ½ÄÀÌ ¸Þ¸ð¸® Àý¾à¸é¿¡¼´Â À¯¸®Çѵ¥ SwapVoid´Â ¾î¶² ŸÀÔ¿¡ ´ëÇØ¼°Ç ÇÔ¼ö´Â µü Çϳª¹Û¿¡ »ý¼ºµÇÁö ¾Ê´Â´Ù.
ÄÄÆÄÀÏ·¯´Â È£ÃâºÎÀÇ ½ÇÀμö ŸÀÔÀ» ÆÇº°ÇÏ¿© ÇÊ¿äÇÑ ÇÔ¼ö¸¦ ±¸Ã¼ÈÇϴµ¥ ¿¹¸¦ µé¾î Swap(a, b)´Â a, b°¡ Á¤¼öÀ̹ǷΠSwap(int, int) ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÒ °ÍÀ̰í Swap(c, d)´Â c, d°¡ ½Ç¼öÇüÀ̹ǷΠSwap(double, double) ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÒ °ÍÀÌ´Ù. ÅÛÇø´ ŸÀÔ Á¤ÀÇ¿¡ ÀÇÇØ µÎ ÀμöÀÇ Å¸ÀÔÀº °°¾Æ¾ß ÇϹǷΠSwapTemp ¿¹Á¦¿¡¼ Swap(a, c)´Â µÎ ÀμöÀÇ Å¸ÀÔÀÌ int, double·Î ´Þ¶ó ¿¡·¯·Î 󸮵ȴÙ. Swap(a, c) È£Ãâ¿¡ ´ëÇØ Swap(double, double) ÇÔ¼ö¸¦ ±¸Ã¼ÈÇϰí a¸¦ double·Î ¾Ï½ÃÀû º¯È¯Çؼ È£ÃâÇÒ ¼öµµ ÀÖÀ» °Í °°Áö¸¸ ÅÛÇø´Àº ŸÀÔÀÌ Á¤È®ÇØ¾ß ÇϹǷΠ¾Ï½ÃÀû º¯È¯±îÁö´Â °í·ÁÇÏÁö ¾Ê´Â´Ù.
»ó¼ö´Â º¯¼ö¿Í ´Þ¸® ±× ÇüŸ¸À¸·Î ŸÀÔÀ» Á¤È®ÇÏ°Ô ÆÇ´ÜÇϱâ Èûµç °æ¿ì°¡ ÀÖ´Ù. ±×·¡¼ ÅÛÇø´ ÇÔ¼ö¸¦ È£ÃâÇÒ ¶§ ½ÇÀμö¿Í´Â ´Ù¸¥ ŸÀÔÀ» °Á¦·Î ÁöÁ¤ÇÒ ¼ö Àִµ¥ À̶§´Â ÇÔ¼ö¸í ´ÙÀ½ÀÇ < > °ýÈ£¾È¿¡ ¿øÇϴ ŸÀÔÀ» ¹àÈù´Ù. ´ÙÀ½ ÅÛÇø´ ÇÔ¼ö´Â Å« °ªÀ» Á¶»çÇÑ´Ù.
template <typename T>
T Max(T a, T b)
{
return (a > b) ? a:b;
}
Max(3, 4)´Â µÎ Àμö°¡ Á¤¼öÇüÀ̹ǷΠMax(int, int) ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÏ¿© È£ÃâÇÒ °ÍÀÌ´Ù. ±×·¯³ª Max<double>(3, 4)·Î È£ÃâÇÏ¸é ½ÇÀμö 3, 4°¡ Á¤¼öÇü »ó¼öÁö¸¸ »ê¼ú º¯È¯µÇ¾î Max(double, double) ÇÔ¼ö°¡ È£ÃâµÈ´Ù. ¹°·Ð Max(3.0, 4.0)À̶ó°í È£ÃâÇØµµ ¸¶Âù°¡ÁöÀÌ´Ù. Á¤¼öÇü º¯¼ö µÑ¿¡ ´ëÇØ ½Ç¼öÇü Max¸¦ È£ÃâÇÏ°í ½ÍÀ¸¸é Max((double)a, (double)b)·Î ij½ºÆ® ¿¬»êÀÚ¸¦ »ç¿ëÇÒ ¼öµµ ÀÖ´Ù.
¸®ÅÏ Å¸ÀÔÀ̳ª Àμö·Î Á÷Á¢ »ç¿ëµÇÁö ¾Ê´Â ŸÀÔÀ» °¡Áö´Â ÇÔ¼ö¸¦ È£ÃâÇϱâ À§Çؼ´Â ¸í½ÃÀûÀ¸·Î ÅÛÇø´ÀÇ Àμö ŸÀÔÀ» ÁöÁ¤ÇØ¾ß ÇÑ´Ù. ¸®ÅÏ Å¸ÀÔÀº È£ÃâÇÒ ÇÔ¼ö¸¦ °áÁ¤ÇÒ ¶§´Â »ç¿ëµÇÁö ¾ÊÀ¸¸ç ¶ÇÇÑ Àμö·Î Àü´ÞµÇÁö ¾Ê°í ÇÔ¼ö ³»ºÎ¿¡¼¸¸ »ç¿ëÇϴ ŸÀÔµµ ÇÔ¼ö È£Ãâ¹®¿¡´Â ³ªÅ¸³ªÁö ¾Ê´Â´Ù. ÀÌ·² ¶§´Â ÄÄÆÄÀÏ·¯°¡ ÇÔ¼ö È£Ãâ¹®¸¸À¸·Î ±¸Ã¼ÈÇÒ ÇÔ¼ö¸¦ °áÁ¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î ¾î¶² ŸÀÔÀÇ ÅÛÇø´ ÇÔ¼ö¸¦ ¿øÇÏ´ÂÁö¸¦ ºÐ¸íÈ÷ ÁöÁ¤ÇØ¾ß ÇÑ´Ù.
|
¿¹ Á¦ : TempReturn |
#include <Turboc.h>
#include <iostream>
using namespace std;
template <typename T>
T cast(int s)
{
return (T)s;
}
template <typename T>
void func(void)
{
T v;
cin >> v;
cout << v;
}
void main()
{
unsigned i=cast<unsigned>(1234);
double d=cast<double>(5678);
printf("i=%d, d=%f\n",i,d);
func<int>();
}
cast´Â Àμö·Î Àü´ÞµÈ s¸¦ ÅÛÇø´ Àμö°¡ ÁöÁ¤Çϴ ŸÀÔÀ¸·Î ij½ºÆÃÇÏ´Â ÇÔ¼öÀÌ´Ù. cast(1234) È£Ãâ¹®¸¸À¸·Î´Â ¾î¶² ¹öÀüÀÇ ÇÔ¼ö¸¦ ¸¸µéÁö °áÁ¤ÇÒ ¼ö ¾øÀ¸¹Ç·Î ¸í½ÃÀûÀ¸·Î Àμö¸¦ ¹àÇô¼ È£ÃâÇØ¾ß ÇÑ´Ù. 1234¶ó´Â »ó¼ö´Â castÀÇ Á¤¼öÇü Àμö·Î °íÁ¤µÇ¾î ÀÖÀ» »ÓÀÌÁö T¸¦ °áÁ¤Çϴµ¥´Â »ç¿ëÇÒ ¼ö ¾ø´Ù. ÀÌ ¿¹Á¦ÀÇ °æ¿ì unsigned cast(int), double cast(int) µÎ ¹öÀüÀÇ ÇÔ¼ö°¡ ±¸Ã¼ÈµÇ´Âµ¥ ÀÌ µÎ ÇÔ¼ö´Â À̸§ÀÌ µ¿ÀÏÇϰí Àμö ¸ñ·Ï±îÁö °°À¸¹Ç·Î ¿À¹ö·Îµù Á¶°ÇÀ» ¸¸Á·ÇÏÁö ¸øÇÑ´Ù. ÀÌó·³ ¸®ÅÏ Å¸ÀÔ¸¸ ´Ù¸¥ °æ¿ì¶óµµ ÅÛÇø´¿¡ ÀÇÇØ °¢°¢ µû·Î ±¸Ã¼ÈµÉ ¼ö´Â ÀÖÁö¸¸ È£ÃâÇÒ ¶§ ¾î¶² ÇÔ¼ö¸¦ È£ÃâÇÏ´ÂÁö¸¦ ¹Ýµå½Ã ¹àÇô¾ß ÇÑ´Ù.
±×³É cast(1) À̶ó°í È£ÃâÇØ ¹ö¸®¸é ¾î¶² ÇÔ¼ö¸¦ ¿øÇÏ´ÂÁö °áÁ¤ÇÒ ¼ö ¾ø¾î ¸ðÈ£ÇϹǷΠ¿¡·¯·Î 󸮵ȴÙ. 1234¶ó´Â Á¤¼ö »ó¼ö¸¦ unsignedÇüÀ¸·Î ij½ºÆ®ÇÏ°í ½Í´Ù¸é cast<unsigned>(1234)·Î È£ÃâÇϰí 5678À̶ó´Â Á¤¼ö »ó¼ö¸¦ double ŸÀÔÀ¸·Î ij½ºÆ®ÇÏ·Á¸é cast<double>(5678)·Î È£ÃâÇÑ´Ù. cast¶ó´Â ÅÛÇø´ À̸§¸¸À¸·Î´Â Á¤º¸°¡ ºÎÁ·ÇÏ´Ù.
func ÇÔ¼ö´Â ³»ºÎÀûÀΠ󸮸¦ À§ÇØ TÇüÀÇ Áö¿ªº¯¼ö v¸¦ ¼±¾ðÇÏ¿© »ç¿ëÇÑ´Ù. ¹°·Ð T°¡ °¡º¯ÀûÀΠŸÀÔÀ̹ǷΠº»Ã¼´Â Àü´ÞµÈ ¸ðµç ŸÀÔ¿¡ ´ëÇØ °¡´ÉÇÑ Äڵ常 »ç¿ëÇØ¾ß ÇÑ´Ù. func´Â Àμöµµ ¸®Åϰªµµ ¾øÀ¸¹Ç·Î È£ÃâºÎ¸¸ ºÁ¼´Â µµ´ëü ¾î¶² ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÒ Áö ÀüÇô °áÁ¤ÇÒ ¼ö ¾ø´Ù. µû¶ó¼ func()¶ó°í È£ÃâÇϸé ÄÄÆÄÀÏ·¯´Â ¹» ¿øÇÏ´ÂÁö ¾î¸®µÕÀýÇØ ÇÒ °ÍÀÌ´Ù. À̶§µµ func<int>() ó·³ Áö¿ªº¯¼ö vÀÇ Å¸ÀÔÀ» ¸í½ÃÀûÀ¸·Î Àü´ÞÇØ¾ß ÇÑ´Ù.
¸®ÅÏ Å¸ÀÔ¸¸ ´Ù¸¥ ÅÛÇø´À̳ª ¾ËÁöµµ ¸øÇϴ ŸÀÔÀÇ Áö¿ªº¯¼ö¸¦ ¼±¾ðÇÏ´Â ÇÔ¼ö´Â ±×´ÙÁö ½Ç¿ë¼ºÀÌ ¾ø¾î º¸À̰í Àú·± °É ¾îµð´Ù ¾µ±î ½ÍÁö¸¸ ȣȯµÇ´Â ¿©·¯ °¡Áö ŸÀÔÀÇ °´Ã¼ Áß ¿øÇÏ´Â °ÍÀ» ¼±ÅÃÇØ¼ ´ë½Å »ý¼ºÇØ ÁÖ´Â ·¡ÆÛ ÇÔ¼ö¸¦ ¸¸µé°í ½ÍÀ» ¶§ ÀÌ·± ±â¹ýÀÌ °¡²û »ç¿ëµÇ±âµµ ÇÑ´Ù. STLÀ» ¿¬±¸ÇÏ´Ù º¸¸é ÀÌ·± ÇÔ¼ö¸¦ ½ÇÁ¦·Î º¼ ¼ö Àִµ¥ ±×¶§¸¦ À§ÇØ ÀÌ·± ¹®¹ýµµ ÀÖ´Ù´Â °ÍÀº ±â¾ïÇØ µÎµµ·Ï ÇÏÀÚ.
¸í½ÃÀû Àμö ÁöÁ¤ ±â¹ýÀº ºñ½Á ºñ½ÁÇÑ ÇÔ¼ö¸¦ ¿©·¯ ¹ú ¸¸µéÁö ¾Ê°í ƯÁ¤ÇÑ ÇÑ Å¸ÀÔ¿¡ ´ëÇØ¼¸¸ ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÏ°í ½ÍÀ» ¶§µµ ¾ÆÁÖ ½Ç¿ëÀûÀÌ´Ù. ´ÙÀ½ ¿¹Á¦¸¦ º¸ÀÚ.
|
¿¹ Á¦ : ExplicitPara |
#include <Turboc.h>
template <typename T>
void LongFunc(T a)
{
// ¾ÆÁÖ ±ä ÇÔ¼öÀÇ º»Ã¼
}
void main()
{
int i=1;
unsigned u=2;
long l=3;
LongFunc(i);
LongFunc(u);
LongFunc(l);
}
LongFuncÀº º»Ã¼°¡ ±²ÀåÈ÷ Å« ÇÔ¼öÀÌ°í ±æÀ̰¡ ±æ´Ù°í ÇÒ ¶§ int, unsigned, long °¢°¢¿¡ ´ëÇØ ÀÌ ÇÔ¼ö¸¦ ÀÏÀÏÀÌ ±¸Ã¼ÈÇÏ¸é ½ÇÇà ÆÄÀÏÀÇ ¿ë·®ÀÌ ¹«½Ã¸øÇÒ Á¤µµ·Î Ä¿Áú °ÍÀÌ´Ù. ÀÌ ¿Ü¿¡µµ int¿Í ȣȯµÇ´Â ŸÀÔÀº char, short, ¿°ÅÇü µî ¾ÆÁÖ ¸¹Àº ŸÀÔÀÌ Àִµ¥ »ç½Ç ÀÌ Å¸ÀÔµéÀº int¿Í °ÅÀÇ ¶È°°Àº ¹æ¹ýÀ¸·Î ó¸®ÇÒ ¼ö ÀÖÀ¸¹Ç·Î ±»ÀÌ º»Ã¼¸¦ µû·Î ¸¸µé ÇÊ¿ä±îÁö´Â ¾øÀ» °ÍÀÌ´Ù. ÀÌ·² ¶§´Â È£Ãâ¹®À» ´ÙÀ½°ú °°ÀÌ ÀÛ¼ºÇÏ¿© ±¸Ã¼ÈµÇ´Â ÇÔ¼öÀÇ ¼ö¸¦ ÁÙÀÏ ¼ö ÀÖ´Ù.
LongFunc<int>(i);
LongFunc<int>(u);
LongFunc<int>(l);
½ÇÀμöÀÇ Å¸ÀÔ¿¡ »ó°ü¾øÀÌ LongFunc(int) ÇÔ¼ö¸¸ ±¸Ã¼ÈµÇ¸ç ½ÇÀμö°¡ Á¤¼ö·Î »ê¼ú º¯È¯µÇ¾î Àü´ÞµÈ´Ù. ¹°·Ð ÀÌ °æ¿ì Á¤¼ö·Î »ê¼ú º¯È¯µÇ¾îµµ »ó°ü¾ø´Â ½ÇÀμö¸¸ »ç¿ëÇØ¾ß ÇÑ´Ù.
ÇÔ¼öÀÇ È£ÃâºÎ¸¦ º¸°í ÄÄÆÄÀÏ·¯°¡ ÅÛÇø´ ÇÔ¼ö¸¦ ¾Ë¾Æ¼ ¸¸µå´Â °ÍÀ» ¾Ï½ÃÀû ±¸Ã¼È¶ó°í ÇÑ´Ù. °³¹ßÀÚ°¡ ¿øÇϴ ŸÀÔÀ¸·Î ÇÔ¼ö¸¦ È£ÃâÇϱ⸸ ÇÏ¸é ³ª¸ÓÁö´Â ÄÄÆÄÀÏ·¯°¡ ´Ù ¾Ë¾Æ¼ Çϸç È£ÃâÇÏÁö ¾Ê´Â ŸÀÔ¿¡ ´ëÇØ¼´Â ±¸Ã¼ÈÇÏÁö ¾Ê´Â´Ù. ¸¸¾à ƯÁ¤ ŸÀÔ¿¡ ´ëÇÑ ÅÛÇø´ ÇÔ¼ö¸¦ °Á¦·Î ¸¸µé°í ½Í´Ù¸é À̶§´Â ¸í½ÃÀû ±¸Ã¼È(Explicit Instantiation)¸¦ Çϴµ¥ ÀÌ´Â ÁöÁ¤ÇÑ Å¸ÀÔ¿¡ ´ëÇØ ÇÔ¼ö¸¦ »ý¼ºÇϵµ·Ï ÄÄÆÄÀÏ·¯¿¡°Ô Áö½ÃÇÏ´Â °ÍÀÌ´Ù. ¿¹¸¦ µé¾î float ŸÀÔÀ» ±³È¯ÇÏ´Â ÇÔ¼ö¸¦ »ý¼ºÇÏ°í ½Í´Ù¸é ´ÙÀ½ ¸í·ÉÀ» »ç¿ëÇÑ´Ù.
template void Swap<float>(float, float);
¸í½ÃÀû ±¸Ã¼È ¸í·ÉÀÇ Ç¥±â´Â ÀÏ´Ü Å°¿öµå template°¡ ¾Õ¿¡ ¿À°í ÇÔ¼ö À̸§ ´ÙÀ½¿¡ »ý¼ºÇÏ°í ½ÍÀº ŸÀÔÀ» < > °ýÈ£¾È¿¡ Àû´Â´Ù. ÀÌ ¼±¾ð¿¡ ÀÇÇØ floatÇüÀ» Àμö·Î ÃëÇÏ´Â Swap(float, float) ÇÔ¼ö°¡ ¸¸µé¾îÁø´Ù. ´ç¿¬ÇÑ ¾ê±â°ÚÁö¸¸ ÅÛÇø´ÀÌ ¾î¶² ¸ð¾çÀÎÁö¸¦ ¾Ë¾Æ¾ß ÄÄÆÄÀÏ·¯°¡ ÀÌ·± ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖÀ¸¹Ç·Î ¸í½ÃÀû ±¸Ã¼È ¸í·ÉÀº ÅÛÇø´ ¼±¾ðº¸´Ù µÚ¿¡ ¿Í¾ß ÇÑ´Ù.
ÀÌ ÇÔ¼ö°¡ ´çÀå ÇÊ¿äÄ¡ ¾Ê´õ¶óµµ ÀÏ´Ü ¸¸µé¾î ³õ°í ½Í´Ù¸é ¸í½ÃÀû ±¸Ã¼È·Î °Á¦ »ý¼ºÀ» Áö½ÃÇÒ ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î Áö±Ý ÀÛ¼ºÇÏ´Â ¼Ò½º¿¡¼´Â ÀÌ ÇÔ¼ö°¡ ÇÊ¿äÄ¡ ¾ÊÁö¸¸ ÄÄÆÄÀÏµÈ ¶óÀ̺귯¸®·Î ¹èÆ÷ÇÏ°í ½Í´Ù¸é ¸í½ÃÀû ±¸Ã¼È¸¦ ÇÒ Çʿ䰡 ÀÖ´Ù. ±×·¯³ª ½ÇÁ¦ »óȲ¿¡¼ ÀÌ·± °æ¿ì´Â °ÅÀÇ ¹ß»ýÇÏÁö ¾Ê´Âµ¥ ¿Ö³ÄÇϸé ÇÔ¼ö ÅÛÇø´ Á¤Àǹ®Àº º¸Åë Çì´õ ÆÄÀÏ¿¡ ÀÛ¼ºÇϸç Çì´õ ÆÄÀÏÀ» ¹èÆ÷Çϱ⠶§¹®ÀÌ´Ù. ¶óÀ̺귯¸®¸¦ »ç¿ëÇÏ´Â Ãø¿¡¼ Çì´õ ÆÄÀÏÀ» ÀÎŬ·çµåÇϰí Swap(float, float)¸¦ È£ÃâÇÏ¸é ±×¶§ ÄÄÆÄÀÏ·¯°¡ ÀÌ ÇÔ¼ö¸¦ ±¸Ã¼ÈÇÒ °ÍÀ̹ǷΠ¹®Á¦°¡ µÇÁö ¾ÊÀ» °ÍÀÌ´Ù.
´Ù¸¸ ÇÔ¼öÀÇ ³»¿ëÀ» ¼û±â°í ½ÍÀ» ¶§´Â ÇÔ¼ö ÅÛÇø´À» °ø°³ÇÒ ¼ö ¾øÀ¸¹Ç·Î ÀÌ·² ¶§´Â ¸í½ÃÀû ±¸Ã¼È·Î ÀÚÁÖ »ç¿ëÇÒ¸¸ÇÑ Å¸ÀÔ¿¡ ´ëÇØ ÀÏ·ÃÀÇ ÇÔ¼ö ÁýÇÕÀ» ¹Ì¸® »ý¼ºÇØ ³õ´Â´Ù. ÀÌ ¶óÀ̺귯¸®ÀÇ »ç¿ëÀÚ´Â °³¹ßÀÚ°¡ ¸í½ÃÀûÀ¸·Î ±¸Ã¼ÈÇØ ³õÀº ÇÔ¼ö¸¸ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸í½ÃÀû ±¸Ã¼È´Â ÄÄÆÄÀÏ ¼Óµµ¿¡µµ ±àÁ¤ÀûÀÎ È¿°ú°¡ Àִµ¥ ¹Ì¸® ÇÊ¿äÇÑ ÇÔ¼ö¸¦ »ý¼ºÇØ ³õÀ¸¸é ÄÄÆÄÀÏ·¯°¡ ¾î¶² ÇÔ¼ö¸¦ »ý¼ºÇÒ °ÍÀÎÁö¸¦ ÆÇ´ÜÇÏ´Â ½Ã°£À» Á¶±Ý Àý¾àÇÒ ¼ö ÀÖ´Ù.