Ŭ·¡½º ÅÛÇø´ ¼±¾ð¹®Àº ¹Ýµå½Ã »ç¿ëÇϱâ Àü¿¡ ¿Í¾ß ÇÑ´Ù. PosValueTemp ¿¹Á¦¿¡¼ º¸´Ù½ÃÇÇ main ÇÔ¼öº¸´Ù ÅÛÇø´ ¼±¾ðÀÌ ´õ ¾Õ¿¡ Àִµ¥ ÀÌ ¼ø¼°¡ ¹Ù²î¸é main¿¡¼ ÂüÁ¶ÇÏ´Â PosValue<int>, PosValue<char>°¡ ¹«¾ùÀ» ÀǹÌÇÏ´ÂÁö ¸ð¸£¹Ç·Î ¿¡·¯·Î ó¸®µÉ °ÍÀÌ´Ù. ´Ü, ÅÛÇø´ Ŭ·¡½ºÀÇ ¸â¹ö ÇÔ¼ö º»Ã¼ Á¤Àǹ®Àº ¾ÕÂÊ¿¡ ÀÌ¹Ì ¼Ò¼Ó°ú ¿øÇüÀÌ ¼±¾ðµÇ¾î ÀÖÀ¸¹Ç·Î main ÇÔ¼öº¸´Ù µÚ¿¡ À־ »ó°ü¾ø´Ù.
¿¹Á¦ ¼öÁØ¿¡¼´Â ÇÑ ÆÄÀϾȿ¡ Ŭ·¡½º ¼±¾ð°ú ¸â¹ö ÇÔ¼öÀÇ Á¤ÀÇ, ±×¸®°í ÀÌ Å¬·¡½º¸¦ »ç¿ëÇÏ´Â Å×½ºÆ® ÄÚµå±îÁö ¸ðµÎ °°ÀÌ ÀÛ¼ºÇÏ´Â °ÍÀÌ Æí¸®ÇÏÁö¸¸ ½ÇÁ¦ ÇÁ·ÎÁ§Æ®¿¡¼´Â Ŭ·¡½ºº°·Î ¸ðµâÀ» ±¸¼ºÇÏ´Â °ÍÀÌ ÀϹÝÀûÀÌ´Ù. Ŭ·¡½º ÅÛÇø´ÀÇ °æ¿ìµµ ¸¶Âù°¡Áö·Î º°µµÀÇ ¸ðµâÀ» ÀÛ¼ºÇÒ ¼ö Àִµ¥ À̶§ ÅÛÇø´ ¼±¾ð¹®°ú ¸â¹ö ÇÔ¼öÀÇ Á¤ÀDZîÁö ¸ðµÎ Çì´õ ÆÄÀÏ¿¡ ÀÛ¼ºµÇ¾î¾ß ÇÑ´Ù.
¸â¹ö ÇÔ¼ö¸¦ Á¤ÀÇÇÏ´Â ÇÔ¼ö ÅÛÇø´Àº ½ÇÁ¦·Î ÇÔ¼öÀÇ º»Ã¼¸¦ ¸¸µå´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ±¸Çö ÆÄÀÏ¿¡ ÀÛ¼ºÇؼ´Â ¾ÈµÈ´Ù. ¸¸¾à PosValue Ŭ·¡½º ÅÛÇø´Àº PosValue.h¿¡¼ ¼±¾ðÇÏ°í ÀÌ Å¬·¡½º¿¡ ¼ÓÇÑ ¸â¹ö ÇÔ¼ö¿¡ ´ëÇÑ Á¤ÀÇ´Â PosValue.cpp¿¡ ´ÙÀ½°ú °°ÀÌ µû·Î ÀÛ¼ºÇÑ´Ù°í ÇØ º¸ÀÚ.
#include "PosValue.h"
template <typename T>
void PosValue<T>::OutValue()
{
gotoxy(x,y);
cout << value << endl;
}
ÀÌ·¸°Ô µÇ¸é OutValue ÇÔ¼ö´Â PosValue.cpp ¾È¿¡¼¸¸ ¾Ë·ÁÁö¹Ç·Î ´Ù¸¥ ¸ðµâ¿¡ ÀÖ´Â main ÇÔ¼ö¿¡¼´Â OutValue°¡ Á¤ÀǵÇÁö ¾ÊÀº °ÍÀ¸·Î ÀÎ½ÄµÇ¾î ¿¡·¯·Î 󸮵ȴÙ. ÀÏ¹Ý ÇÔ¼ö´Â ÄÄÆÄÀϽÿ¡ ¿øÇü¸¸ ¼±¾ðÇϸé ÄÄÆÄÀÏ °¡´ÉÇÏ°í ¸µÅ©ÇÒ ¶§ ¹ÙÀεùµÇ´Âµ¥ ºñÇØ ÅÛÇø´Àº ÄÄÆÄÀÏÇÒ ¶§ ¿Ïº®ÇÏ°Ô ±¸Ã¼ÈµÇ¾î¾ß ÇϹǷΠ°°Àº ¹ø¿ª ´ÜÀ§¾È¿¡ ¼±¾ðÀÌ ÀÖ¾î¾ß ÇÑ´Ù. C/C++ ÄÄÆÄÀÏ·¯ÀÇ ¹ø¿ª ´ÜÀ§´Â Cpp ÆÄÀÏ + Æ÷ÇÔµÈ Çì´õ - Á¶°ÇºÎ ÄÄÆÄÀÏ·Î Á¦¿ÜµÈ ºÎºÐÀÌ´Ù.
ÅÛÇø´Àº ¸¸µé°íÀÚ Çϴ Ŭ·¡½º¿Í ¸â¹ö ÇÔ¼öÀÇ ¸ð¾çÀ» ÄÄÆÄÀÏ·¯¿¡°Ô ¾Ë¸®±â¸¸ ÇÒ »ÓÀÌÁö ±× ÀÚü°¡ Äڵ带 »ý¼ºÇÏ´Â °ÍÀº ¾Æ´Ï¸ç µû¶ó¼ ¿ÜºÎ·Î ¾Ë·ÁÁöÁö ¾Ê´Â´Ù. Ŭ·¡½º ÅÛÇø´Àº Çì´õ ÆÄÀÏ¿¡ ÀÛ¼ºÇÏ´Â °ÍÀÌ ¿øÄ¢ÀûÀÌ¸ç ½ÇÁ¦ Äڵ带 »ý¼ºÇÏ´Â °ÍÀÌ ¾Æ´Ï¹Ç·Î ¼³»ç ÀÌ Çì´õ ÆÄÀÏÀ» ¿©·¯ ¸ðµâ¿¡¼ ÀÎŬ·çµåÇÏ´õ¶óµµ Áߺ¹ Á¤ÀǵǾú´Ù´Â ¿¡·¯°¡ ¹ß»ýÇÏÁö´Â ¾Ê´Â´Ù. ÇÑ ¸ðµâ¿¡¼ °°Àº À̸§¿¡ ´ëÇØ #defineÀ» µÎ ¹ø ÇÏ¸é ¾ÈµÇÁö¸¸ #define ¹®ÀÌ ÀÖ´Â Çì´õ¸¦ °¢ ¸ðµâ¿¡¼ ÀÎŬ·çµåÇصµ ¹®Á¦°¡ ¾ÈµÇ´Â °Í°ú °°´Ù.
±×·¯³ª Çì´õ ÆÄÀÏ¿¡ Ŭ·¡½º ÅÛÇø´À» µÎ°Ô µÇ¸é ÃÖÁ¾ »ç¿ëÀÚ¿¡°Ô ÀÌ Å¬·¡½ºÀÇ Äڵ带 ¼û±æ ¼ö ¾ø´Ù´Â ´ÜÁ¡ÀÌ ÀÖ´Ù. ±â¼úÀûÀ¸·Î Áß¿äÇÑ »çÇ×À» ´ã°í Àִ Ŭ·¡½ºÀÇ ¼Ò½º°¡ ´©ÃâµÉ ¼ö ÀÖ´Â º¸¾È»óÀÇ ¹®Á¦°¡ ÀÖ´Â °ÍÀÌ´Ù. ±×·¡¼ ÃֽŠC++ Ç¥ÁØÀº cpp ÆÄÀÏ¿¡ Ŭ·¡½º ÅÛÇø´ÀÇ ¸â¹ö ÇÔ¼ö¸¦ Á¤ÀÇÇÒ ¼ö ÀÖ´Â export Å°¿öµå¸¦ µµÀÔÇÏ°í ÀÌ Å°¿öµå¸¦ »ç¿ëÇÏ¸é ±¸Çö ÆÄÀÏ¿¡ Á¤ÀÇµÈ ¸â¹ö ÇÔ¼ö°¡ ¿ÜºÎ·Îµµ ¾Ë·ÁÁöµµ·Ï ÇÑ´Ù. ÅÛÇø´ ¼±¾ð¾Õ¿¡ export¸¦ ºÙÀÌ¸é µÈ´Ù.
export template <typename T>
void PosValue<T>::OutValue() { ... }
±×·¯³ª ÀÌ Å°¿öµå´Â ¸î¸î ½ÃÇèÀûÀÎ ÄÄÆÄÀÏ·¯µé¸¸ Áö¿øÇÏ°í ÀÖÀ» »ÓÀÌ¸ç ºñÁÖ¾ó C++, gcc¸¦ Æ÷ÇÔÇÑ ´ëºÎºÐÀÇ ÄÄÆÄÀÏ·¯¿¡¼ ¾ÆÁ÷ Áö¿øÇÏÁö ¾Ê´Â´Ù. Ç¥ÁØÀ¸·Î äÅõǾúÀ½¿¡µµ ºÒ±¸ÇÏ°í Áö¿øÇÏÁö ¸øÇÏ´Â ÄÄÆÄÀÏ·¯°¡ ¸¹Àº ÀÌÀ¯´Â ÀÌ Å°¿öµå°¡ ÀüÅëÀûÀÎ ¸ðµâ ºÐÇÒ ¹æ½ÄÀÇ ÄÄÆÄÀÏ·¯¿Í´Â Àß ¸ÂÁö ¾Ê±â ¶§¹®ÀÌ´Ù. C/C++ ÄÄÆÄÀÏ·¯´Â ¹ø¿ª ´ÜÀ§º°·Î ÄÄÆÄÀÏÇÏ¿© ¸µÅ©ÇÒ ¶§ ÇÕÄ¡´Â ¹æ½ÄÀ» »ç¿ëÇϴµ¥ export·Î ÁöÁ¤µÈ ÇÔ¼ö¿¡ ´ëÇؼ´Â ¸ðµç ¹ø¿ª ´ÜÀ§¿¡ ´ëÇؼµµ ±× Á¤ÀǸ¦ ¾Ë·Á¾ß ÇϹǷΠ±Ùº»ÀûÀÎ ÄÄÆÄÀÏ ¹æ½ÄÀ» ¹Ù²Ù±â Àü¿¡´Â Áö¿øÇϱⰡ ´ë´ÜÈ÷ ¾î·Æ´Ù. ¾ÈŸ±õ°Ôµµ ÀÌ Å°¿öµå´Â ´çºÐ°£Àº ¾µ ¼ö ¾øÀ¸¸ç ±×·¡¼ ÅÛÇø´ ¶óÀ̺귯¸®µéÀº °ÅÀÇ ´ëºÎºÐ ¼Ò½º°¡ °ø°³µÇ¾î ÀÖ´Ù.