°ïÖú linunx C++ ѧϰ template class
TArray.h#idndef TARRAY_H
#define TARRAY_H
template < class elemType >
class TArray {
explicit TArray ( int size = DefaultArraySize );
~TArray() { delete [] ia; }
int size () const { return _size; }
elemType operator[]( int index ) const { return ia[index]; }
#endif
TArray.cpp
#include "TArray.h"
template <class elemType>
TArray<elemType>::TArray( int size )
{
_size = size;
ia = new elemType[_size];
for( int index = 0; index < _size; index++ )
ia[index]=index;
}
useTArray.cpp
#include <iostream>
#include "TArray.h"
int main()
{
TArray<int> arr1(8);
TArray<double> arr2;
return 0;
}
g++ useTArray.cpp TArray.cpp -g -o useTA
˵£ºundefined reference to 'TArray<int>::TArray(int)'
undefined reference to 'TArray<double>::TArray(int)'
µ±°Ñ useTArray.cpp ÖÐ "TArray.h" »»³É "TArray.cpp" ʱ£¬ÎÞ´íÎó£¬Çë½Ì ´íÎóÌ«¶à£¡ÇëÖØÐÂд£¡ ¿´Â¥Ö÷µÄÀඨÒå·¨£¬ºÙºÙ£¬»¹ÒÔΪÊÇDephi¡¡ TemplateºÃÏñ¶¨ÒåͬÉùÃ÷ÒªÔÚͬһ¸ö.hÎļþÀï ÏÈ¿´Ò»ÏÂÕâÌõÃüÁ
g++ useTArray.cpp TArray.cpp -g -o useTA
ʵÏÖÊÇ£¬±àÒëuseTArray.cpp£¬ ·¢ÏÖ
TArray<int> arr1(8);
TArray<double> arr2;
ËùÒÔÐèÒªÌæ»»£¬µ«ÊÇ´Ëʱ±àÒëÆ÷ÈÏΪÔÚÆäËûµØ·½ÒѾչ¿ªÁË£¬ËùÒÔ¾ÍÒªµÈµ½ldµÄʱºò×ö¡£
ͬʱ£¬TArray.cpp £¬Ã»ÓÐ˵Ã÷Ò»¶¨ÒªÕ¹¿ªint, double°¢£¿
ËùÒÔÔÚldµÄʱºò¾Í»á·¢ÏÖûÓж¨Òå¡£
ÊÂʵÉÏ£¬ÓÐÁ½ÖÖ·½·¨¿ÉÒÔʵÏÖ£¬Ò»¸öÊǰüº¬includeģʽ£¬¾ÍÊÇÂ¥ÉϵØËµµÄ·ÅÔÚ.hxxÀïÃæ¡£
µ«ÊÇÕâÑù¿ÉÄÜÔì³É´úÂëµÄÅòÕÍ¡£
ÁíÍâÒ»ÖÖÊÇÖØÐÂдһ¸öÎļþinstantiation.cxx,È»ºó½øÐÐÌØ»¯
#include TArray.hxx
template<>
class TArray<int>{};
class TArray<double>{};
g++ useTArray.cpp TArray.cpp instantiation.cxx -g -o useTA
µ±È»ÕâÑù»¹ÊÇÓÐÎÊÌâ£¬ÌØ±ðÊÇÏîÄ¿ºÜ´óµÄʱºò£¬»á³öÏÖÖØ¸´instantiation¡£
Ò»°ã²ÉÓÃinclude Ä£ÐÍ.
½¨ÒéÄã¿´¿´C++ template ÎÒ´óÖ¿´ÁËһϣ¬´íÎóÈçÏ£º
1¡¢ÄãµÄ´úÂë´ò´í×ֵĵط½Óкü¸´¦£¬Æ©È磺TArray.hÖУ¬#ifndefÄã´ò³ÉÁË#iddef£¬º¹£¬ÕâÖÖ´íÎóÊÇд´úÂëµÄʱºòÄÑÒÔ±ÜÃâµÄ£¬¿ÉÊÇÈ´ÊÇ×îÍ·Ì۵쬲»¸Ã·¸µÄ´íÎó£¬Äþ¿É´òÂýµã£¬Ò²ÒªÈ·±£Ò»´Î´òÕýÈ·£¬ÕâºÃÏñСѧÉú¶¼ÖªµÀµÄ
2¡¢TArray.hÖÐÀàµÄ×îºóÄãÍüÁË};ÔÙº¹Ò»¸ö
3¡¢ÄãµÄÀàÖеijÉÔ±º¯ÊýÈ«²¿ÉùÃ÷Ϊ˽ÓУ¬¿ñº¹£¬ÄãÇ¿
4¡¢×îºóÔÙº¹Ò»´Î£¬ÄãµÄ´úÂëÎÒÊÇû·¨ÔÙ¿´ÏÂÈ¥ÁË£¬¼òÖ±¾ÍÊÇÒ»ÍÅÂÒÂé
ÎÒ¿´Â¥Ö÷»¹ÊÇ»ØÈ¥ºÃºÃ¿´C++ Primer ºÍThinking in C++£¬ÔÙ¿´¿´HoUJJµÄGeneric Programming and STL£¬»òÕßÊÇC++ Template°É¡£¡£¡£
»ù´¡ÊÇ×îÖØÒªµÄ£¬²»Òª¼±ÓÚÇó³É£¬ÂýÂýÀ´
Ò»²½Ò»²½ ¿ÉÒÔÓÃһЩ´úÂë×Ô¶¯²¹È«¹¤¾ßÀ´½â¾öÒÔÉÏÒ»¶þµãÎÊÌâ... 0_0 TEMPLATE Á½ÖÖ±àÒëģʽ
°üº¬ºÍ·ÖÀë.
LZ×Ô¼ºÈ¥¿´¿´°É
Ò³:
[1]