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

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

ʱ¼ä£º2006-06-16 11:29:29  À´Ô´£ºÖйúITʵÑéÊÒ  ×÷ÕߣºLinuxÁªÃËÊÕ¼¯
£vDTLinuxÁªÃË
vDTLinuxÁªÃË
ÎÒÃÇÖªµÀ¶ÔÓÚÏÂÃæµÄÄ£°åÀࣺvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
#ifdef CODE_NOTEvDTLinuxÁªÃË
template vDTLinuxÁªÃË
struct StructvDTLinuxÁªÃË
{vDTLinuxÁªÃË
};vDTLinuxÁªÃË
Struct<0> a;vDTLinuxÁªÃË
Struct<1> b;vDTLinuxÁªÃË
Struct<2> c;vDTLinuxÁªÃË
Struct<3> d;vDTLinuxÁªÃË
//... ...vDTLinuxÁªÃË
#endif//CODE_NOTEvDTLinuxÁªÃË
#if 0vDTLinuxÁªÃË
vDTLinuxÁªÃË
ÉÏÃæµÄStructÄ£°åµÄÄ£°å²ÎÊý²»Í¬½«»áÉú³É²»Í¬µÄÀàÐÍ¡£ÀýÈ磺ÉÏÃæµÄStruct<0>¡¢vDTLinuxÁªÃË
Struct<1>¡¢Struct<2>ºÍStruct<3>ÊÇËÄÖÖ²»Í¬µÄÀàÐÍ¡£ÕâÒ»µã¾ÍÏñÊǸøÕâ¸öÄ£°å±àºÅÈÃÕâvDTLinuxÁªÃË
¸ö±àºÅµÄ²»Í¬À´Çø·Ö³ö²»Í¬µÄÀàÐÍ¡£ÕýÊÇÒòΪÕâÖÖÏÖÏóµÄ´æÔÚÎÒÃDzÅÓÐÁËÕâÑùµÄ˼Ï룺ÔÚvDTLinuxÁªÃË
еÄscatter´úÂëÉú³É»úÖÆÖиøÃ¿Ò»¸ö´®ÖеÄÀàÐÍÉùÃ÷±äÁ¿µÄʱºò¶îÍâÌí¼ÓÒ»¸öÀàÐÍË÷ÒýºÅvDTLinuxÁªÃË
¡£ÕâÑù¾Í¿ÉÒÔʹÓþ²Ì¬×ªÐÍ·½·¨·Ö±æ³öͬÀàÐ͵ıäÁ¿ÁË¡£¼û´úÂëCODE1Ëùʾ£ºvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
#ifdef CODE1vDTLinuxÁªÃË
#include vDTLinuxÁªÃË
#include "meta.h"//ΪÁËÒýÈëpandaxcl::consvDTLinuxÁªÃË
//ÏÂÃæµÄ´úÂë½ö½öÊÇΪÁ˲âÊÔ²úÉú´úÂëµÄË÷ÒýºÅºÍÀàÐÍÊÇ·ñÆ¥Åä¶øÒýÈëµÄÌØÐÔÀàÄ£°åvDTLinuxÁªÃË
//˵µÃ¼òµ¥µã£¬ÕâÀïËùνµÄÌØÐÔÀà¾ÍÊÇÒ»ÖÖ´óÐ͵Äswitch£¬case½á¹¹£¬Ö»²»¹ýÊǸú¾ÝvDTLinuxÁªÃË
//ÀàÐ͵IJ»Í¬ÓɱàÒëÆ÷À´×Ô¶¯Ñ¡ÔñÏàÓ¦µÄÄ£°å¡£ÔÚÕâÀïÌÖÂÛµÄÌØÐÔÀàʵ¼ÊÉÏ¿ÉÒÔÓ¦ÓÃvDTLinuxÁªÃË
//µ½³·ÏúºÍÖØ×ö¿ò¼ÜµÄÐòÁл¯·½°¸ÖÐÈ¥£¬µ±È»ÕâÊÇΪÁ˱£´æÀàÐÍÃû³ÆÁË¡£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ÁªÃË
////////////////////////////////////////////////////////////vDTLinuxÁªÃË
//ÏÂÃæµÄÕâ¸ö²úÉú´úÂëµÄ¸ñʽ»¹¿ÉÒÔʹÓÃË÷ÒýºÅµÃµ½»ùÔª¶ÔÏó×¢ÒâÁË£ºÏÂÃæµÄµÝ¹éÄ£°åµÄvDTLinuxÁªÃË
//ÖÕ½áÌõ¼þ²¢²»ÊǵÚÒ»¸öÄ£°å²ÎÊýsize_t¶øÊǵڶþ¸öÄ£°å²ÎÊýT£¬ÕâÒ»µãºÜÖØÒª£¬ÒòÎªÇ°ÃævDTLinuxÁªÃË
//µÄÎÄÕÂÖÐÌÖÂ۵ͼÊÇÒÔÊý×Ö0×÷ΪÖÕ½áÌõ¼þµÄ¡£ËùÒÔÕâÀïÐèÒªÌØ±ð˵Ã÷һϣ¬ÁíÍâÒ²¿ÉÒÔvDTLinuxÁªÃË
//¸øÄãÒ»µãÁé¸Ð:)vDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scatter_helper : public UnitvDTLinuxÁªÃË
{vDTLinuxÁªÃË
//ÏÂÃæµÄ¹¹Ô캯Êý½ö½öÊÇΪÁËÊä³öË÷ÒýºÅ¶ÔÓ¦µÄÀàÐÍÐÅÏ¢¶øÒýÈëµÄvDTLinuxÁªÃË
scatter_helper()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
std::cout << traits::name() << " : "
<< i << std::endl;vDTLinuxÁªÃË
}vDTLinuxÁªÃË
};vDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scatter_helper<:cons,Unit>vDTLinuxÁªÃË
: public scatter_helpervDTLinuxÁªÃË
, public scatter_helper//µÝÔöµÄΪÿһ¸öÀàÐÍÌí¼ÓÒ»¸ö¶îÍâµÄË÷ÒýºÅvDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef pandaxcl::cons cons_type;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//ÏÂÃæµÄnull_type²Î¿´Ç°Ò»ÕÂÖеĴúÂëvDTLinuxÁªÃË
templateclass Unit>vDTLinuxÁªÃË
struct scatter_helper<:null_type,unit>vDTLinuxÁªÃË
{vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//ΪÁ˺ÍÇ°ÃæÕ½ÚÖÐÌÖÂÛµÄscatter¼æÈÝÒ²ÊÇΪÁË·½±ãʹÓã¬
<:cons<:null_type,unit>ÕâÀïÖØÐ¶Ôscatter_helper½øÐÐvDTLinuxÁªÃË
//°ü×°Éú³ÉÁËÒ»¸öÄ£°åÀàscatter£¬ÕâÑùÇ°ÃæÊ¹ÓõÄÈκη½·¨Õë¶Ô
<:cons<:null_type,unit>ÓÚÕâ¸öеÄscatterÀàͬÑùvDTLinuxÁªÃË
//ÊÊÓá£vDTLinuxÁªÃË
template class Unit>vDTLinuxÁªÃË
struct scatter:public scatter_helper<0,Cons,Unit>vDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef Cons cons_type;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//ÏÂÃæµÄº¯ÊýÓÃÀ´¸ù¾ÝÀàÐÍË÷ÒýºÅÀ´µÃµ½ÏàÓ¦µÄ»ùÔªÀàÐÍvDTLinuxÁªÃË
template class Unit>vDTLinuxÁªÃË
scatter_helper::result,Unit>&vDTLinuxÁªÃË
field(scatter&obj)vDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef typename pandaxcl::type::result CT;vDTLinuxÁªÃË
typedef scatter_helper RT;vDTLinuxÁªÃË
return static_cast(obj);vDTLinuxÁªÃË
};vDTLinuxÁªÃË
template class Unit>vDTLinuxÁªÃË
const scatter_helper::result,Unit>&vDTLinuxÁªÃË
field(const scatter&obj)vDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef typename pandaxcl::type::result CT;vDTLinuxÁªÃË
typedef scatter_helper RT;vDTLinuxÁªÃË
return static_cast(obj);vDTLinuxÁªÃË
};vDTLinuxÁªÃË
//////////////////////////////////////////////////vDTLinuxÁªÃË
//ÏÂÃæÊDzâÊÔ´úÂëvDTLinuxÁªÃË
namespace xcl=pandaxcl;vDTLinuxÁªÃË
template struct TestUnitvDTLinuxÁªÃË
{vDTLinuxÁªÃË
T _value;vDTLinuxÁªÃË
};vDTLinuxÁªÃË
int main()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef xcl::consvDTLinuxÁªÃË
xcl::consvDTLinuxÁªÃË
<:cons<:null_type,unit>  xcl::consvDTLinuxÁªÃË
xcl::consvDTLinuxÁªÃË
<:cons<:null_type,unit> xcl::null_type> > > >CONS;vDTLinuxÁªÃË
std::cout << "========scatter_helper========" <<:endl;
 
<:cons<:null_type,unit><:endl;
{vDTLinuxÁªÃË
scatter_helper<0,CONS,TestUnit> v;vDTLinuxÁªÃË
static_cast&>(v)._value = 10;vDTLinuxÁªÃË
static_cast&>(v)._value = 'B';vDTLinuxÁªÃË
static_cast&>(v)._value = 'C';vDTLinuxÁªÃË
static_cast&>(v)._value = 11;vDTLinuxÁªÃË
std::cout << static_cast&>(v)._value << " ";vDTLinuxÁªÃË
std::cout << static_cast&>(v)._value << " ";vDTLinuxÁªÃË
std::cout << static_cast&>(v)._value << " ";vDTLinuxÁªÃË
std::cout << static_cast&>(v)._value << " ";vDTLinuxÁªÃË
}vDTLinuxÁªÃË
std::cout << std::endl << "========field(scatter&)======="
<:cons<:null_type,unit><:endl;
<<:endl;
///////////////////////////////////////////////////////vDTLinuxÁªÃË
{vDTLinuxÁªÃË
scatter v;vDTLinuxÁªÃË
field<0>(v)._value = 20;vDTLinuxÁªÃË
field<1>(v)._value = 'F';vDTLinuxÁªÃË
field<2>(v)._value = 'G';vDTLinuxÁªÃË
field<3>(v)._value = 21;vDTLinuxÁªÃË
std::cout << field<0>(v)._value << " ";vDTLinuxÁªÃË
std::cout << field<1>(v)._value << " ";vDTLinuxÁªÃË
std::cout << field<2>(v)._value << " ";vDTLinuxÁªÃË
std::cout << field<3>(v)._value << " ";vDTLinuxÁªÃË
}vDTLinuxÁªÃË
std::cout << std::endl << "=====
<:cons<:null_type,unit><:endl;
<:endl;
field(const scatter&)====" <<:endl;
{vDTLinuxÁªÃË
scatter v;vDTLinuxÁªÃË
field<0>(v)._value = 30;vDTLinuxÁªÃË
field<1>(v)._value = 'J';vDTLinuxÁªÃË
field<2>(v)._value = 'K';vDTLinuxÁªÃË
field<3>(v)._value = 31;vDTLinuxÁªÃË
//²âÊÔ³£Á¿Çé¿öϵÄfield¸¨Öúº¯ÊývDTLinuxÁªÃË
const scatter&cv = v;vDTLinuxÁªÃË
std::cout << field<0>(cv)._value << " ";vDTLinuxÁªÃË
std::cout << field<1>(cv)._value << " ";vDTLinuxÁªÃË
std::cout << field<2>(cv)._value << " ";vDTLinuxÁªÃË
std::cout << field<3>(cv)._value << " ";vDTLinuxÁªÃË
}vDTLinuxÁªÃË
std::cout << std::endl
<:cons<:null_type,unit><:endl;
<:endl;
<:endl;
<< "==============================" <<:endl;
return 0;vDTLinuxÁªÃË
}vDTLinuxÁªÃË
#endif//CODE1vDTLinuxÁªÃË
////////////////////////////////////////////vDTLinuxÁªÃË
//¸Ã³ÌÐòÔËÐнá¹ûÈçÏ£ºvDTLinuxÁªÃË
/**********************************************vDTLinuxÁªÃË
========scatter_helper========vDTLinuxÁªÃË
int : 0vDTLinuxÁªÃË
char : 1vDTLinuxÁªÃË
char : 2vDTLinuxÁªÃË
int : 3vDTLinuxÁªÃË
10 B C 11 vDTLinuxÁªÃË
========field(scatter&)=======vDTLinuxÁªÃË
int : 0vDTLinuxÁªÃË
char : 1vDTLinuxÁªÃË
char : 2vDTLinuxÁªÃË
int : 3vDTLinuxÁªÃË
20 F G 21 vDTLinuxÁªÃË
=====field(const scatter&)====vDTLinuxÁªÃË
int : 0vDTLinuxÁªÃË
char : 1vDTLinuxÁªÃË
char : 2vDTLinuxÁªÃË
int : 3vDTLinuxÁªÃË
30 J K 31 vDTLinuxÁªÃË
==============================vDTLinuxÁªÃË
*************************************************************/vDTLinuxÁªÃË
//////////////////////////////////////////////////////////////////vDTLinuxÁªÃË
#if 0vDTLinuxÁªÃË
vDTLinuxÁªÃË
´ÓÔËÐнá¹û¿ÉÒÔ¿´³öÎÒÃÇÒѾ­³É¹¦µÄ½â¾öÁ˱¾ÎÄ¿ªÍ·ËùÌá³öµÄÎÊÌâ¡£Õâ¸öеĴúÂë²úÉúvDTLinuxÁªÃË
Ä£°åÒѾ­Ð´³öÀ´ÁË¡£ÎªÁËÒÔºóʹÓõķ½±ãÐèÒª½«Õâ¸öÄ£°åÀà¼ÓÈëµ½meta.hÖС£²»¹ý±¾ÎÄÖÐʹvDTLinuxÁªÃË
ÓõÄmeta.h²¢Ã»Óаüº¬ÕâÀïµÄscatterÄ£°åÀ࣬¼û¸½Â¼Ëùʾ¡£vDTLinuxÁªÃË
vDTLinuxÁªÃË
±¾ÕÂÍê¡£vDTLinuxÁªÃË
vDTLinuxÁªÃË
ʵ¼ÊÉÏC++Ä£°åÔª±à³ÌµÄ»ù´¡ÓëÓ¦ÓÃÖеĻù´¡ÆªÒѾ­Ð´ÍêÁË£¬´ÓÏÂÒ»Õ¿ªÊ¼½«»áÌÖÂÛÕâÖÖvDTLinuxÁªÃË
±à³Ì¼¼ÊõµÄһЩӦÓÃרÌâ¡£ÏÂÒ»ÕÂÀïÃæ½«»áÉæ¼°µ½µÄרÌâÊÇÀàÐÍÌØÐÔtrait¡££¨¾´Çë¹Ø×¢!£©vDTLinuxÁªÃË
vDTLinuxÁªÃË
δÍ꣬´ýÐø...vDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
#ifdef CODE_NOTE//¸½Â¼£º±¾ÎIJÉÓõÄmeta.hÎļþÄÚÈÝÈçÏ£ºvDTLinuxÁªÃË
#pragma oncevDTLinuxÁªÃË
namespace pandaxcl{vDTLinuxÁªÃË
///////////////////////////////////////////////////vDTLinuxÁªÃË
template vDTLinuxÁªÃË
struct IFvDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef Then result;//½«ThenÀàÐÍ×÷ΪÌõ¼þÎªÕæµÄ·µ»ØÖµ
<:cons<:null_type,unit><:endl;
<:endl;
<:endl;
<:endl;
£¨·µ»ØÖµÎªÀàÐÍ£©vDTLinuxÁªÃË
};vDTLinuxÁªÃË
templatevDTLinuxÁªÃË
struct IFvDTLinuxÁªÃË
{vDTLinuxÁªÃË
typedef Else result;//½«ElseÀàÐÍ×÷ΪÌõ¼þΪ¼ÙµÄ·µ»ØÖµ£¨·µ»ØÖµÎªÀàÐÍ£©vDTLinuxÁªÃË
};vDTLinuxÁªÃË
////////////////////////////////////////////////////////////vDTLinuxÁªÃË
/////////////////////////////////////////////////////////vDTLinuxÁªÃË
////¼ÓÈëÒ»¸öÍ⸲²ãÀ´´«µÝ¶îÍâµÄÄ£°å²ÎÊývDTLinuxÁªÃË
template class Function,size_t start,size_t finish,size_t step>vDTLinuxÁªÃË
struct LOOPvDTLinuxÁªÃË
{vDTLinuxÁªÃË
//ΪÁËÄܹ»ÕýÈ·µÄ¼ÆËã³öʵ¼ÊµÄÑ­»·ÖÕÖ¹±äÁ¿£¬ÐèÒª¶Ô¸ø¶¨µÄÖÕÖ¹±äÁ¿vDTLinuxÁªÃË
//½øÐмÆËã£
 8/11   |‹ ‹‹ 6 7 8 9 10 11 ›› ›|

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