| ÂÛ̳ע²á| ¼ÓÈëÊÕ²Ø | ÉèΪÊ×Ò³| RSS
Google
Äúµ±Ç°µÄλÖãºÊ×Ò³ > LinuxƵµÀ > Linux¿ª·¢Çø > Èí¼þ¿ª·¢

C++×Ô¶¯»¯(Ä£°åÔª)±à³Ì»ù´¡ÓëÓ¦ÓÃ

ʱ¼ä£º2006-06-16 11:29:29  À´Ô´£ºÖйúITʵÑéÊÒ  ×÷ÕߣºLinuxÁªÃËÊÕ¼¯
¬ÒÔÂú×ãÕýÈ·µÄÑ­»·ÓïÒåvDTLinuxÁªÃË
enum{real_finish=(finish/step*step+start)};vDTLinuxÁªÃË
static void execute()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
LOOP_BODY::execute();vDTLinuxÁªÃË
}vDTLinuxÁªÃË
//ÏÂÃæµÄÕâ¸öÄ£°åº¯ÊýÊÇΪÁËÄܹ»ÊµÏÖ¾²Ì¬´úÂëºÍ¶¯Ì¬´úÂëÁ¬½ÓvDTLinuxÁªÃË
template vDTLinuxÁªÃË
static void execute(EnvironmentType&e)vDTLinuxÁªÃË
{vDTLinuxÁªÃË
LOOP_BODY::execute(e);vDTLinuxÁªÃË
}vDTLinuxÁªÃË
private:vDTLinuxÁªÃË
//ÒýÈëÁËÒ»¸ö²¼¶ûÐ͵ÄÄ£°å²ÎÊýÓÃÀ´È·¶¨Ñ­»·µÄÖÕÖ¹Ìõ¼þvDTLinuxÁªÃË
template struct LOOP_BODYvDTLinuxÁªÃË
{vDTLinuxÁªÃË
static void execute()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
LOOP_BODYstart)>::execute();vDTLinuxÁªÃË
Function::execute();vDTLinuxÁªÃË
}vDTLinuxÁªÃË
//ÏÂÃæµÄÕâ¸öÄ£°åº¯ÊýÊÇΪÁËÄܹ»ÊµÏÖ¾²Ì¬´úÂëºÍ¶¯Ì¬´úÂëÁ¬½ÓvDTLinuxÁªÃË
template vDTLinuxÁªÃË
static void execute(EnvironmentType&e)vDTLinuxÁªÃË
{vDTLinuxÁªÃË
LOOP_BODYstart)>::execute(e);vDTLinuxÁªÃË
Function::execute(e);vDTLinuxÁªÃË
}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//Ñ­»·µÄÖÕÖ¹Óï¾ä£¬Í£Ö¹µÝ¹éÒÔ½áÊøÑ­»·vDTLinuxÁªÃË
template struct LOOP_BODYvDTLinuxÁªÃË
{vDTLinuxÁªÃË
static void execute(){}vDTLinuxÁªÃË
//ÏÂÃæµÄÕâ¸öÄ£°åº¯ÊýÊÇΪÁËÄܹ»ÊµÏÖ¾²Ì¬´úÂëºÍ¶¯Ì¬´úÂëÁ¬½ÓvDTLinuxÁªÃË
template vDTLinuxÁªÃË
static void execute(EnvironmentType&e){}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//ΪÁËÄ£°å»¯±ØÐ뽫ԭÀ´µÄÊä³öº¯Êý×ö³ÉÒ»¸öÄ£°å½á¹¹ÌåvDTLinuxÁªÃË
//template struct FunctionvDTLinuxÁªÃË
//{vDTLinuxÁªÃË
// static void execute()vDTLinuxÁªÃË
// {vDTLinuxÁªÃË
// //ÄãµÄ´úÂëÔÚÕâÀï±àдvDTLinuxÁªÃË
// }vDTLinuxÁªÃË
//};vDTLinuxÁªÃË
//////////////////////////////////vDTLinuxÁªÃË
/////////////////////////////////vDTLinuxÁªÃË
//consµÄʵÏÖ£¬²ÉÓúÍSTLÀàËÆµÄÀàÐÍÃüÃû·½Ê½vDTLinuxÁªÃË
template vDTLinuxÁªÃË
struct consvDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef FirstType first_type;vDTLinuxÁªÃË
typedef SecondType second_type;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
struct null_type;//ÀàÐÍ´®ÖÕ½á·ûvDTLinuxÁªÃË
//ÏÂÃæÊÇÁ½¸öΪÁËʵÏÖ¾²Ì¬ÀàÐÍÑ­»·ËùÐèÒªµÄ¾²Ì¬Ôªº¯ÊývDTLinuxÁªÃË
//lengthÔªº¯ÊýµÄʵÏÖvDTLinuxÁªÃË
templatestruct length;vDTLinuxÁªÃË
template<>struct lengthvDTLinuxÁªÃË
{//·µ»ØÖµÎªÕûÊý£¬ÃüÃûΪvaluevDTLinuxÁªÃË
enum{value=0};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
templatevDTLinuxÁªÃË
struct length >vDTLinuxÁªÃË
{//·µ»ØÖµÎªÕûÊý£¬ÃüÃûΪvaluevDTLinuxÁªÃË
enum{value=1+length::value};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//typeÔªº¯ÊýµÄʵÏÖvDTLinuxÁªÃË
templatestruct type;vDTLinuxÁªÃË
templatevDTLinuxÁªÃË
struct type,0>vDTLinuxÁªÃË
{//·µ»ØÖµÎªÀàÐÍ£¬ÃüÃûΪresultvDTLinuxÁªÃË
typedef FirstType result;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
templatevDTLinuxÁªÃË
struct type,i>vDTLinuxÁªÃË
{//·µ»ØÖµÎªÀàÐÍ£¬ÃüÃûΪresultvDTLinuxÁªÃË
typedef typename type::result result;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//indexÔªº¯Êý¸ù¾ÝÀàÐ͵õ½ÀàÐÍ´®ÖиÃÀàÐÍλÖÃvDTLinuxÁªÃË
templatestruct index;vDTLinuxÁªÃË
template struct indexvDTLinuxÁªÃË
{vDTLinuxÁªÃË
enum{value=-1};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
template struct index,Test>vDTLinuxÁªÃË
{vDTLinuxÁªÃË
enum{value=0};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
template struct index,Test>vDTLinuxÁªÃË
{vDTLinuxÁªÃË
private:vDTLinuxÁªÃË
enum{temp=index::value};vDTLinuxÁªÃË
public:vDTLinuxÁªÃË
enum{value=(temp==-1?-1:1+temp)};vDTLinuxÁªÃË
};vDTLinuxÁªÃË
////////////////////////////////////////////vDTLinuxÁªÃË
//ÏÂÃæÊÇʵÏÖ´úÂë×Ô¶¯Éú³ÉµÄÄ£°åÔªº¯Êý£¬Ö÷Òª²Î¿¼ÁËLokiµÄ´úÂëvDTLinuxÁªÃË
//ΪÁ˳·ÏúºÍÖØ×ö¿âµÄ¶ÀÁ¢ÐÔ£¬½«¸Ã¹¦ÄÜ´ÓLoki¿âÖÐÌáÈ¡³öÀ´vDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scatter : public UnitvDTLinuxÁªÃË
{vDTLinuxÁªÃË
};vDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scatter,Unit>vDTLinuxÁªÃË
: public scattervDTLinuxÁªÃË
, public scattervDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef cons cons_type;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//ÏÂÃæµÄnull_type²Î¿´Ç°Ò»ÕÂÖеĴúÂëvDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scattervDTLinuxÁªÃË
{vDTLinuxÁªÃË
};vDTLinuxÁªÃË
////////////////////////////////////////////////////// vDTLinuxÁªÃË
}//namespace pandaxcl{vDTLinuxÁªÃË
#enidf//CODE_NOTE
#if 0vDTLinuxÁªÃË
vDTLinuxÁªÃË
ÔÚÉÏÒ»ÕÂÀïÃæÌÖÂÛÁË´úÂëµÄ×Ô¶¯Éú³É»úÖÆ£¬¾­³£»áÓöµ½¸ù¾Ý²»Í¬µÄÀàÐÍÑ¡Ôñ²»Í¬µÄ²ÙvDTLinuxÁªÃË
×÷µÄÇé¿ö£¬Ò²¾ÍÊǾ²Ì¬·ÖÅɵÄÎÊÌâ¡£Õâ¾ÍÐèÒªÓÐÒ»ÖÖ»úÖÆÓÃÀ´Ê¶±ð²»Í¬µÄÀàÐÍ£¬ÔÚ±¾ÕÂÀïvDTLinuxÁªÃË
Ãæ½«»áϵͳµÄÌÖÂÛC++ÀïÃæ¿ÉÓõÄÀàÐÍʶ±ðÎÊÌâ¡£vDTLinuxÁªÃË
vDTLinuxÁªÃË
×î³£¼ûµÄÓÐÏÂÃæ¼¸ÖÖ£ºvDTLinuxÁªÃË
vDTLinuxÁªÃË
(1)¸ù¾ÝÄ£°å²ÎÊýÐèÒª¾«È·Æ¥ÅäÀàÐÍÀ´Ê¶±ðÀàÐÍvDTLinuxÁªÃË
vDTLinuxÁªÃË
(2)¸ù¾ÝÒþʽ×Ô¶¯×ªÐÍÀ´ÅжÏÀàÐÍÊÇ·ñ¿ÉÒÔ×Ô¶¯×ªÐÍ£¬´Ó¶ø¿ÉÒÔÅжÏÊÇij¸ö»ùÀàµÄÅÉÉúvDTLinuxÁªÃË
Àà¡£vDTLinuxÁªÃË
vDTLinuxÁªÃË
(3)¸øÃ¿Ò»¸öÀàÐͶ¼×·¼ÓÒ»¸ö¶îÍâµÄÄ£°å²ÎÊýÓÃÀ´±íʾ²»Í¬µÄÀàÐÍ£¬Ò»°ã¶¼ÊÇÓò»Í¬µÄvDTLinuxÁªÃË
Êý×ÖÓ³ÉäΪ²»Í¬µÄÀàÐÍÀ´ÊµÏÖÀàÐÍʶ±ðµÄ£¬Ç°ÃæÌÖÂ۵ĿÉÒÔÓÐÖØ¸´ÀàÐ͵Äscatter´úÂë²úÉúvDTLinuxÁªÃË
Æ÷¾Í²ÉÓÃÁËÕâÖÖ·½·¨À´Ê¶±ð²»Í¬µÄÀàÐ͵ġ£vDTLinuxÁªÃË
vDTLinuxÁªÃË
ÔÚÕâÒ»ÕÂÀïÃæ½«»á·Ö±ðÌÖÂÛÉÏÃæµÄÈýÖÖÇé¿öµÄÒ»°ãÓ¦ÓãºvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
#ifdef CODE1//g++ -DCODE1 thisfile.cppvDTLinuxÁªÃË
//²ÉÓ÷½·¨(1)À´Ê¶±ð²»Í¬µÄÀàÐÍvDTLinuxÁªÃË
#include vDTLinuxÁªÃË
#include vDTLinuxÁªÃË
#include vDTLinuxÁªÃË
template struct traits;vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "char ";}};vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "int ";}};vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "short ";}};vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "long ";}};vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "float ";}};vDTLinuxÁªÃË
template <> struct traits {static const char*name(){return "double";}};vDTLinuxÁªÃË
template <> struct traits<:string>vDTLinuxÁªÃË
{vDTLinuxÁªÃË
static const char*name(){return "std::string";}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
template <> struct traits<:complex >vDTLinuxÁªÃË
{vDTLinuxÁªÃË
static const char*name(){return "std::complex";}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
template <> struct traits<:complex >vDTLinuxÁªÃË
{vDTLinuxÁªÃË
static const char*name(){return "std::complex";}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
int main()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
std::cout<<"char :["<::name()<<"]"<<:endl;
std::cout<<"int
<:string><:complex<:complex<:endl;
:["<::name()<<"]"<<:endl;
std::cout<<"short :["<::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
std::cout<<"long :["<::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
<:endl;
std::cout<<"float :["<::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
std::cout<<"double:["<::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
std::cout<<"std::string:["<<:string>::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
<:string><:endl;
std::cout<<"std::complex:["<<:complex >::name()<<"]"<<:endl;
 
<:string><:complex<:complex<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
<:endl;
<:string><:endl;
<:complex<:endl;
std::cout<<"std::complex:["<<:complex >::name()<<"]"<<:endl;
return 0;vDTLinuxÁªÃË
}vDTLinuxÁªÃË
#endif//CODE1vDTLinuxÁªÃË
/////////////////////////////////////////////////////vDTLinuxÁªÃË
//¸Ã³ÌÐòµÄÔËÐнá¹û£ºvDTLinuxÁªÃË
/*************************************************************vDTLinuxÁªÃË
char :[char ]vDTLinuxÁªÃË
int :[int ]vDTLinuxÁªÃË
short :[short ]vDTLinuxÁªÃË
lon

À´¶¥Ò»ÏÂ
½ü»ØÊ×Ò³
·µ»ØÊ×Ò³
·¢±íÆÀÂÛ ¹²ÓÐÌõÆÀÂÛ
Óû§Ãû: ÃÜÂë:
ÑéÖ¤Âë: ÄäÃû·¢±í
Ïà¹ØÎÄÕÂ
    ÎÞÏà¹ØÐÅÏ¢
À¸Ä¿¸üÐÂ
À¸Ä¿ÈÈÃÅ