°°Àº ÅÛÇø´À¸·ÎºÎÅÍ ¸¸µé¾îÁø ÇÔ¼ö´Â ŸÀÔ¸¸ Á¦¿ÜÇÏ°í µ¿ÀÏÇÑ º»Ã¼¸¦ °¡Áö¹Ç·Î µ¿ÀÛµµ µ¿ÀÏÇÏ´Ù. ¸¸¾à ƯÁ¤ ŸÀÔ¿¡ ´ëÇØ¼¸¸ ´Ù¸£°Ô µ¿ÀÛÇϵµ·Ï ÇÏ°í ½Í´Ù¸é À̶§´Â Ư¼öÈ(Specialization)¶ó´Â ±â¹ýÀ» »ç¿ëÇÑ´Ù. ¿¹¸¦ µé¾î Swap ÇÔ¼ö¸¦ ½Ç¼ö¿¡ ´ëÇØ Àû¿ëÇÒ ¶§´Â °ªÀ» ÀüºÎ ±³È¯ÇÏÁö ¸»°í Á¤¼öºÎ¸¸ ±³È¯ÇÏ°í ½Í´Ù°í ÇÏÀÚ. ÀÌ·² ¶§´Â double Çü¿¡ ´ëÇØ¼ Ư¼öÇÑ ÇÔ¼ö¸¦ Çϳª ¸¸µé¸é µÈ´Ù.
|
¿¹ Á¦ : Specialization |
#include <Turboc.h>
template <class T>
void Swap(T &a, T &b)
{
T t;
t=a;a=b;b=t;
}
template <> void Swap<double>(double &a, double &b)
{
int i,j;
i=(int)a;
j=(int)b;
a=a-i+j;
b=b-j+i;
}
void main()
{
double a=1.2,b=3.4;
printf("before a=%g, b=%g\n",a,b);
Swap(a,b);
printf("after a=%g, b=%g\n",a,b);
}
Swap ÇÔ¼ö ÅÛÇø´À» Á¤ÀÇÇØ µÎ°í doubleÇü¿¡ ´ëÇØ¼ Ưº°ÇÑ Swap ÇÔ¼ö¸¦ µû·Î Á¤ÀÇÇß´Ù. double¿¡ ´ëÇØ Ư¼öÈµÈ Swap ÇÔ¼öÀÇ º»Ã¼´Â Á¤¼öºÎ¸¸ ±³È¯ÇÏ´Â °íÀ¯ÇÑ Äڵ带 °¡Áø´Ù. main ¿¡¼´Â µÎ °³ÀÇ ½Ç¼ö¸¦ Swap ÇÔ¼ö·Î ±³È¯Çߴµ¥ ½ÇÇà °á°ú´Â ´ÙÀ½°ú °°´Ù.
before a=1.2, b=3.4
after a=3.2, b=1.4
¸¸¾à double¿¡ ´ëÇÑ Æ¯¼öȸ¦ ÇÏÁö ¾ÊÀ¸¸é ÀϹÝÀûÀÎ Swap ÇÔ¼ö°¡ È£ÃâµÇ¾î ¼Ò¼öºÎ, ½Ç¼öºÎ°¡ °°ÀÌ ¹Ù²ð °ÍÀÌ´Ù. ÄÄÆÄÀÏ·¯´Â ÅÛÇø´ ÇÔ¼ö È£Ãâ ±¸¹®ÀÌ ÀÖÀ» ¶§ Ç×»ó ÅÛÇø´ÀÇ Á¤ÀǺ¸´Ù Ư¼öÈµÈ Á¤ÀÇ¿¡ ¿ì¼±±ÇÀ» ÁֹǷΠµ¿ÀÏÇÑ À̸§ÀÇ ÅÛÇø´°ú Ư¼öÈ ÇÔ¼ö°¡ Á¸ÀçÇÏ¸é Æ¯¼öÈµÈ ÇÔ¼ö°¡ È£ÃâµÈ´Ù. Ư¼öÈ ÇÔ¼ö¸¦ Ç¥±âÇÏ´Â ¹æ¹ýÀº ¿©·¯ °¡Áö°¡ ÀÖ´Ù.
¨ç template <> void Swap<double>(double &a, double &b)
¨è template <> void Swap<>(double &a, double &b)
¨é template <> void Swap(double &a, double &b)
¨ê void Swap<double>(double &a, double &b)
¨ë void Swap<>(double &a, double &b)
¨ì void Swap(double &a, double &b)
Ư¼öÈµÈ ÇÔ¼ö¶ó´Â °ÍÀ» Ç¥½ÃÇϱâ À§ÇØ template <> ·Î ½ÃÀÛÇϴµ¥ <>°¡ ¾øÀ¸¸é ¸í½ÃÀû ±¸Ã¼È ±¸¹®ÀÌ µÇ¹Ç·Î Àß ±¸ºÐÇØ¾ß ÇÑ´Ù. ÇÔ¼ö À̸§ µÚ¿¡´Â ¾î¶² ŸÀÔ¿¡ ´ëÇÑ Æ¯¼öÈ ÇÔ¼öÀÎÁö <> °ýÈ£¿Í Ư¼öÈµÈ Å¸ÀÔ À̸§À» ¹àÈù´Ù. ¨ç¹ø Ç¥±â¹ýÀÌ °¡Àå ¿ÏÀüÇÑ ÇüÅÂÀÌµÇ Á» ´õ °£·«ÇÑ Ç¥±â¹ýµµ ¾µ ¼ö ÀÖ´Ù. ¾î¶² ŸÀÔ¿¡ ´ëÇØ Ư¼öȵǾú´ÂÁö´Â ¾îÂ÷ÇÇ ÀμöÀÇ Å¸ÀÔÀ¸·Îµµ ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ÇÔ¼ö¸í ´ÙÀ½ÀÇ <> °ýÈ£´Â »ý·« °¡´ÉÇϸç <>¸¸ ³²°Ü µÎ°í ŸÀÔ¸¸ »ý·«ÇÏ´Â °Íµµ °¡´ÉÇÏ´Ù. ´Ü, ÅÛÇø´ Àμö°¡ ¸®ÅÏ Å¸ÀÔÀ̳ª ³»ºÎ Áö¿ªº¯¼ö·Î »ç¿ëµÉ ¶§´Â ¨ç¹ø ŸÀÔ¸¸ °¡´ÉÇÏ´Ù.
¶ÇÇÑ ¨ê¹øÃ³·³ ÇÔ¼ö¸í ´ÙÀ½¿¡ <> °ýÈ£°¡ ÀÖ´Ù¸é ÀÌ Ç¥±â·ÎºÎÅÍ ÇÔ¼ö ÅÛÇø´¿¡ ´ëÇÑ Æ¯¼öÈ ÇÔ¼ö¶ó´Â °ÍÀ» ¾Ë ¼ö ÀÖÀ¸¹Ç·Î ¾ÕÂÊÀÇ template <> µµ »ý·« °¡´ÉÇÏ´Ù. ÀÌ Ç¥±â¹ýÀº ±¸Çü ÄÄÆÄÀÏ·¯µéÀÌ ÁÖ·Î »ç¿ëÇÏ´ø ¹æ¹ýÀÌ¸ç ¨ë¹øÃ³·³ <> °ýÈ£¾È¿¡ ŸÀÔ¸íÀ» »ý·«Çصµ »ó°ü¾ø´Ù. ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯°¡ ¾ÆÁ÷±îÁöµµ ÀÌ Ç¥±â¹ýÀ» Áö¿øÇϰí´Â ÀÖÁö¸¸ ÃֽŠǥÁØ¿¡´Â ÀÌ Ç¥±â¹ýÀÌ ÀÎÁ¤µÇÁö ¾ÊÀ¸¹Ç·Î °¡±ÞÀû »ç¿ëÀ» ÀÚÀçÇØ¾ß ÇÑ´Ù.
Ư¼öÈ ÇÔ¼ö¸¦ Ç¥±âÇÏ´Â ¹æ¹ýÀÌ ¿Ö ÀÌ·¸°Ô ¸¹Àº°¡ Çϸé ÅÛÇø´À̶ó´Â ±â´ÉÀÌ Ã³À½ºÎÅÍ Ç¥ÁØ¿¡ ÀÇÇØ Á¤¸³µÈ °ÍÀÌ ¾Æ´Ï¶ó
°¢ ÄÄÆÄÀÏ·¯ Á¦ÀÛ»çµé¿¡ ÀÇÇØ ºñ°ø½ÄÀûÀ¸·Î ¹ßÀüÇØ ¿À´Ù°¡ ºñ±³Àû ÃÖ±Ù¿¡ Ç¥ÁØÀ¸·Î äÅõǾú±â ¶§¹®ÀÌ´Ù. Ç¥ÁØÀÌ Á¦Á¤µÇ¾ú´Ù°í ÇØ¼ ÀÌÀü¿¡ »ç¿ëÇÏ´ø Çü½ÄÀ»
¹«½ÃÇÒ ¼ö´Â ¾ø±â ¶§¹®¿¡ ÀÌ·± ¸¹Àº Ç¥±â¹ýµéÀÌ ³¹«ÇÏ´Â »óȲÀÌ µÇ¾ú´Âµ¥ ÀÌ·± ¸éÀ» º¸¸é Ç¥ÁØÀÌ ¾ó¸¶³ª Áß¿äÇѰ¡¸¦ ¾Ë ¼ö ÀÖ´Ù. Ç¥ÁØ Á¦Á¤ÀÌ ´Ê¾îÁö¸é
º¯Á¾µéÀÌ »ý°Ü ¿©·¯ »ç¶÷µéÀÌ ÇǰïÇØÁø´Ù.
¸¶Áö¸· ¨ì¹ø Çü½ÄÀº Ư¼öÈ ÇÔ¼ö°¡ ¾Æ´Ï¶ó ±×³É ÀÏ¹Ý ÇÔ¼ö SwapÀ» Á¤ÀÇÇÏ´Â °ÍÀÌ´Ù. ÀÌ·¸°Ô ÀÏ¹Ý ÇÔ¼ö¸¦ Á¤ÀÇÇØµµ ÀÏ´ÜÀº ¸ñÀûÀ» ÀÌ·ê ¼ö ÀÖÁö¸¸ ¿ì¼± ¼øÀ§ÀÇ ¹®Á¦°¡ ÀÖ¾î ¹Ù¶÷Á÷ÇÏÁö ¾Ê´Ù. ÇÔ¼ö ÅÛÇø´°ú Ư¼öÈµÈ ÇÔ¼ö, ±×¸®°í ÀÏ¹Ý ÇÔ¼ö°¡ µ¿½Ã¿¡ Á¸ÀçÇÒ °æ¿ì ¾î¶² ÇÔ¼ö¸¦ ¿ì¼±ÀûÀ¸·Î ¼±ÅÃÇÒ °ÍÀΰ¡´Â ÄÄÆÄÀÏ·¯¸¶´Ù ´Ù¸£´Ù. ¸¸¾à ÀÏ¹Ý ÇÔ¼ö°¡ ÅÛÇø´ ÇÔ¼öº¸´Ù ¿ì¼± ¼øÀ§°¡ ´Ê´Ù¸é ÁöÁ¤ÇÑ Å¸ÀÔ¿¡ ´ëÇØ Ư¼öÇÑ Ã³¸®¸¦ ÇÒ ¼ö ¾øÀ» °ÍÀÌ´Ù.
AddTemp
ÀÓÀÇ Å¸ÀÔÀÇ µÎ Àμö a, b¸¦ ´õÇÑ °ªÀ» ¸®ÅÏÇÏ´Â Add ÇÔ¼ö ÅÛÇø´À» ÀÛ¼ºÇ쵂 char *¿¡ ´ëÇØ¼´Â ¹®ÀÚ¿À» ¿¬°áÇϵµ·Ï Ư¼öÈÇ϶ó.