ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 C++ ÅÛÇø´
¸¹Àº C++ ÇÁ·Î±×·¥µéÀÌ ½ºÅÃ, Å¥, ¸®½ºÆ®¿Í °°Àº ÀϹÝÀûÀÎ ÀڷᱸÁ¶¸¦ »ç¿ëÇÑ´Ù. ¿¹ÄÁµ¥, ¸Þ½ÃÁö¸¦ Å¥·Î °ü¸®ÇÏ´Â ÇÁ·Î±×·¥ÀÌ ÀÖ´Ù°í °¡Á¤Çغ¸ÀÚ. ÀÌ ¸Þ½ÃÁö Å¥´Â ¸Þ½ÃÁö¸¦ ¿ø¼Ò·Î »ç¿ëÇÏ´Â ´Ù¸¥ ÇÁ·Î±×·¥¿¡¼µµ Ȱ¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ¸¸¾à Ŭ·¡½º·Î ¸¸µé¾ú´Ù¸é, ÀÚ½ÅÀÇ »óȲ¿¡ ¸Â°Ô Copy, find, replace µîÀÇ ¸Þ¼µå¸¦ ±¸ÇöÇØ¼ »ç¿ëÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. ÀÌ´Â °´Ã¼ÁöÇâ ÇÁ·Î±×·¡¹ÖÀÇ Àç »ç¿ë¼ºÀ» ÈǸ¢ÇÏ°Ô Áö¿øÇÏ´Â °Íó·³ º¸ÀδÙ.
±×·¯³ª ÀÚ·áÇüÀÌ ´Ù¸¦ °æ¿ì Àç »ç¿ë¼ºÀº ¹°°Ç³Ê °£´Ù. Ŭ·¡½º´Â µ¿ÀÏÇÑ ÀÚ·áÇü¿¡ ´ëÇØ¼´Â ÈǸ¢ÇÑ Àç »ç¿ë¼ºÀ» º¸¿©ÁÖÁö¸¸, ÀÚ·áÇüÀÌ ´Ù¸¦ °æ¿ì¿¡´Â ±×·¸Áö ¾Ê´Ù. ¸¸¾à Ŭ·¡½º¸¦ ÀڷᱸÁ¶·Î ¹Þ´Â Å¥°¡ ÇÊ¿äÇÏ´Ù¸é, ÇØ´ç ÀڷᱸÁ¶¿¡ ¸Â°Ô (¸¹Àº ºÎºÐÀ»)»õ·Î ±¸ÇöÇØ¾ß ÇÒ °ÍÀÌ´Ù. Ŭ·¡½º ¸íÀÌ ´Þ¶óÁú ¼öµµ ÀÖÀ» °ÍÀÌ´Ù. ¹°·Ð »ó¼Ó°ú ´ÙÇü¼º °°Àº °³Ã¼ÁöÇâÀû ¿ä¼Ò ȤÀº ÆÐÅÏÀ» ÀÌ¿ëÇÒ ¼ö ÀÖÁö¸¸ Á¦³Ê¸¯ÇÏÁö ¸øÇÏ´Ù.
ÅÛÇø´(Template)Àº Á¦³Ê¸¯ÇÁ·Î±×·¡¹ÖÀ» °¡´ÉÇϵµ·Ï ÇØÁÖ´Â À¯¿ëÇÑ µµ±¸´Ù. C++ÀÇ ÅÆÇø´Àº ÀÚ·áÇüÀÌ ´Ù¸¦ Áö¶óµµ À̸¦ ÃÖ¼ÒÇÑÀÇ ³ë·ÂÀ¸·Î Àç»ç¿ëÇÒ ¼ö ÀÖµµ·Ï µµ¿ÍÁØ´Ù. 2 Ŭ·¡½º ÅÆÇø´2.1 Ŭ·¡½º ÅÆÇø´ ¸¸µé±â
Ŭ·¡½º ÅÆÇø´À» ±¸ÇöÇÏ´Â ¹æ¹ýÀº ´ÙÀ½°ú °°´Ù. Ŭ·¡½º¿¡ template Ű¿öµå¸¸ ´õ ÇØÁÖ¸é µÈ´Ù. template <class T>
class Stack
{
private:
int size;
int top;
T* stackPtr;
public:
Stack(int = 10);
~Stack() {delete[] stackPtr;}
int push_back(const T&);
int pop(T&);
int isFull(){ return top == size -1;};
int end(){ return top == -1;}
};
T´Â ÀÚ·áÇüÀ» ÀǹÌÇϴµ¥, ¾î¶² ÇüÅÂ¶óµµ »ç¿ëÇÒ ¼ö ÀÖÀ½À» ÀǹÌÇÑ´Ù. ¸¸¾à °³¹ßÀÚ°¡ int ÀÚ·áÇüÀ» »ç¿ëÇÑ´Ù¸é T´Â int·Î ġȯµÉ °ÍÀ̰í ÀÌ ½ºÅÃÀº intÇü ÀڷḦ À§ÇÑ Stack·Î »ç¿ëÇÒ ¼ö ÀִٰԵȴÙ. ÀÌ°Ô °¡´ÉÇÑ ÀÌÀ¯´Â ÄÄÆÄÀÏ ½Ã°£¿¡ ÀÚ·áÇüÀ» ÆÇ´ÜÇØ¼ Äڵ带 ¸¸µé±â ¶§¹®ÀÌ´Ù.2.2 Ŭ·¡½º ÅÆÇø´ »ç¿ë
¸ÕÀú Ŭ·¡½º ÅÆÇø´À» ¸¸µç´Ù. // mytemp.h
template <class T>
class a
{
public:
a(){}
int push(const T&)
{
// ...
}
~a(){}
}
ÀÌÁ¦ »ç¿ëÇÏ¸é µÈ´Ù. #include "mytemp.h" int main() { a<int> inta; a<string> stringa; } 2.3 ¼³Á¤ Ŭ·¡½º
¼³Á¤ °ªÀ» Àоî¿À´Â Ŭ·¡½º¸¦ ¸¸µç´Ù°í °¡Á¤Çغ¸ÀÚ. ¼³Á¤À» °¡Á®¿À´Â API´Â ÀÌ¹Ì ¸¸µé¾îÁ® ÀÖÀ¸¸ç, À̸¦ È£ÃâÇØ¼ »ç¿ëÇÑ´Ù°í °¡Á¤ÇØ º¸ÀÚ. À̰æ¿ì ¼³Á¤°ªÀº ´ëºÎºÐ ±¸Á¶Ã¼¸¦ void *·Î Çüº¯È¯Çؼ »ç¿ëÇÒ °Å´Ù.
ÀÌ·¯ÇÑ °æ¿ì ´ÙÀ½°ú °°ÀÌ Å¬·¡½º¸¦ ¸¸µé°í À̸¦ »ó¼ÓÇØ¼ »ç¿ëÇÑ´Ù¸é, ¹ü¿ëÀûÀ¸·Î »ç¿ë°¡´ÉÇÑ ¼³Á¤ Ŭ·¡½º¸¦ °³¹ßÇÒ ¼ö ÀÖÀ» °ÍÀÌ´Ù. template <class T> class ConfigBase
{
private:
vector<T *> cfgVector;
public:
ConfigBase() {}
~ConfigBase()
{
cfgVector.clear();
}
// ¿©±â¿¡¼ ¼³Á¤ API¸¦ È£ÃâÇÏ°í ±× °ªÀº cfgVector¿¡ ³Ö´Â´Ù.
// ¼³Á¤À» Àоî¿À´Â ¿ÜºÎ ÇÔ¼ö´Â configread ¶ó°í ÇϰڴÙ.
// ¼³Á¤À» ÀúÀåÇϱâ À§ÇѸ޸𸮸¦ ÇÒ´çÇϱ⠶§¹®¿¡
// ¼³Á¤°ªÀ» »ç¿ëÇÏÁö ¾ÊÀ» °Å¶ó¸é configfree ÇÔ¼ö¸¦ È£Ã⠸޸𸮸¦ ÇØÁ¦ÇØ¾ß ÇÑ´Ù.
int ReadCfg(const char *cfgname)
{
T *a;
while( (a = (T *)configread()) != NULL)
{
cfgVector.push_back(a);
}
}
int CfgSize()
{
return cfgVector.size();
}
vector<T> *Fetch()
{
return &cfgData;
}
void CloseFetch()
{
configfree();
}
virtual int LoadCfg(const char *cfgname) = 0;
};
ÀÌÁ¦ ´ÙÀ½°ú °°ÀÌ ConfigBase¸¦ »ó¼Ó¹Þ¾Æ¼ »ç¿ëÇÏ¸é µÈ´Ù. ÀÚ·áÇü¿¡ »ó°ü¾øÀÌ ¼³Á¤À» ÀÐÀ» ¼ö ÀÖ´Ù. class appCfg : ConfigBase<struct clientInfo>
{
private:
vector<clientInfo> *cfgList;
public:
int LoadCfg(const char *cfgname)
{
cfgList = Fetch();
// ÀÌ·± Àú·± ÀÛ¾÷ ÈÄ
CloseFetch();
}
};
2.4 Ŭ·¡½º ÅÆÇø´ Specialization
ÅÛÇø´ Ŭ·¡½ºµµ ¿À¹ö¶óÀ̵ùÇÒ ¼ö ÀÖ´Ù. #include <iostream>
using namespace std ;
template <class T>
class stream
{
public:
void f() { cout << "stream<T>::f()"<< endl ;}
} ;
template <>
class stream<char>
{
public:
void f() { cout << "stream<char>::f()"<< endl ;}
} ;
int main()
{
stream<int> si ;
stream<char> sc ;
si.f() ;
sc.f() ;
return 0 ;
}
À§ ¿¹´Â stream<char>À϶§ ¿ø·¡ Á¤ÀÇµÈ f() ÇÔ¼ö´ë½Å »õ·Î ÇÔ¼ö¸¦ ¿À¹ö¶óÀ̵ùÇØ¼ »ç¿ëÇÏ´Â ¹ýÀ» º¸¿©ÁØ´Ù. ƯÁ¤ ÀÚ·áÇü¿¡ ´ëÇØ¼ ´Ù¸¥ ÇൿÀ» Á¤ÀÇÇÒ ¶§ »ç¿ëÇÒ ¼ö ÀÖ´Ù.2.5 ÅÛÇø´ Ŭ·¡½º Partial Specialization
ÅÛÇø´ Ŭ·¡½ºÀÇ typenameÀ» ƯÁ¤Çؼ, ¿©·¯ Æ¯ÈµÈ ÅÛÇø´À» µ¿½Ã¿¡ ¿î¿ëÇÒ ¼öµµ ÀÖ´Ù. include <iostream>
using namespace std;
// Base ÅÛÇø´ Ŭ·¡½º
template<typename T1, typename T2>
class X
{
public:
X(){ cout << "Base Template" << endl; }
} ;
//partial specialization
template<typename T1>
class X<T1, int>
{
public:
X() { cout << "T1, int Template" << endl; }
} ; //C2989 here
int main()
{
X<char, char> xcc ;
X<char, int> xii ;
return 0 ;
}
class X<T1, int>¿¡¼ int ŸÀÔÀ» ƯÁ¤Çؼ, ÅÛÇø´À» ¿î¿ëÇϰí ÀÖ´Ù. À½ ÅÛÇø´ ¿À¹ö·ÎµùÀ̶ó°í ºÁµµ µÉ °Í °°Àºµ¥. Âü°í·Î ÄÄÆÄÀÏ·¯¿¡ µû¶ó¼ partial ÅÛÇø´À» Áö¿øÇÏÁö ¾Ê´Â °æ¿ìµµ ÀÖÀ» ¼ö ÀÖ´Ù. ¿¹¸¦ µé¾î Visual C++ 5.0Àº Áö¿øÇÏÁö ¾Ê´Â´Ù°í ÇÑ´Ù. ¿äÁò¿¡¾ß 8.0ÀÌ»óÀ» »ç¿ëÇϰí ÀÖÀ¸´Ï ¹®Á¦µÉ °Í °°Áø ¾ÊÁö¸¸ È®ÀÎÀº ÇÊ¿äÇÒ °Í °°´Ù. 3 ÅÛÇø´ ÇÔ¼ö
ÅÛÇø´À» ÀÌ¿ëÇϸé, ÄÄÆÄÀÏ ½Ã°£¿¡ µ¥ÀÌÅÍ ÇüÀ» Á¤ÇØÁֹǷΠ¹ü¿ë ÇÔ¼ö¸¦ ¸¸µé ¼ö ÀÖ´Ù.
#include <iostream> #include <stdio.h> #include <string.h> using namespace std; template <class T> T Sum(T a, T b) { return a + b; } template <> char *Sum(char *a, char * b) { return strcat(a, b); } int main() { char a[80]="hello"; char *b = " joinc"; cout << Sum(1, 5) << endl; cout << Sum(8.1, 5.5) << endl; cout << Sum(8.1, 5.5) << endl; cout << Sum(a, b) << endl; }ÅÛÇø´À» ÀÌ¿ëÇØ¼ °£´ÜÇÏ°Ô ¹ü¿ë µ¡¼À ÇÁ·Î±×·¥À» ¸¸µé¾ú´Ù. ´Ü char ¹®ÀÚ¿ µ¥ÀÌÅÍÀÇ °æ¿ì µ¡¼À ¿¬»êÀÌ ºÒ°¡´ÉÇϱ⠶§¹®¿¡, char * µ¥ÀÌÅ͸¦ ó¸®Çϱâ À§ÇÑ ÅÛÇø´ ÇÔ¼ö¸¦ º°µµ·Î Á¤ÀÇ Çß´Ù. ´ÙÀ½Àº ÇÁ·Î±×·¥ ½ÇÇà °á°ú´Ù. 6 13.6 13.6 hello joinc |
|
|
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|