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

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

ʱ¼ä£º2006-06-16 11:29:29  À´Ô´£ºÖйúITʵÑéÊÒ  ×÷ÕߣºLinuxÁªÃËÊÕ¼¯
£vDTLinuxÁªÃË
vDTLinuxÁªÃË
    (type)¸ù¾Ý¾ßÌåµÄCONSÀàÐͺÍÒ»¸ö¸ø¶¨µÄË÷ÒýÖµµÃµ½Ò»¸öÀàÐÍ£¬Ö¸µÄÊÇconsÀàÐÍ´®ÖÐvDTLinuxÁªÃË
µÄÖ¸¶¨Ë÷ÒýÖµµÄλÖõÄÀàÐÍ£¬Õâ¸öË÷ÒýÖµ·ûºÏCÓïÑԵĹ淶£¬ÊÇ´Ó0¿ªÊ¼±àºÅµÄ¡£vDTLinuxÁªÃË
vDTLinuxÁªÃË
    ÔÚ¸ø³ö¾ßÌåµÄÕâÁ½¸öÔªº¯ÊýµÄʵÏÖ֮ǰÐèÒª½«Ç°ÃæµÄÕ½ÚÖеÄÃüÃû¹æ·¶ËµÃ÷һϣºvDTLinuxÁªÃË
    vDTLinuxÁªÃË
    (A)Èç¹ûÔªº¯ÊýµÄ·µ»ØÖµÎªÕûÊý£¬ÄÇô·µ»ØÖµÃû³ÆÃüÃûΪvaluevDTLinuxÁªÃË
vDTLinuxÁªÃË
    (B)Èç¹ûÔªº¯ÊýµÄ·µ»ØÖµÎªÀàÐÍ£¬ÄÇô·µ»ØÖµÃû³ÆÃüÃûΪresultvDTLinuxÁªÃË
    vDTLinuxÁªÃË
    ºÃÁË£¬ÏÖÔÚ¿ÉÒÔ¿´¿´ÈçºÎʵÏÖÕâÁ½¸öÔªº¯ÊýÁË£ºvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
vDTLinuxÁªÃË
#ifdef CODE_NOTEvDTLinuxÁªÃË
//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ÁªÃË
#endif//CODE_NOTEvDTLinuxÁªÃË
vDTLinuxÁªÃË
#if 0vDTLinuxÁªÃË
vDTLinuxÁªÃË
    Á½¸öÐèÒªµÄÔªº¯ÊýÒѾ­³É¹¦µÄ¸ø³öÁË£¬Èç¹ûÓÐʲô²»Çå³þµÄµØ·½Ò²¿ÉÒԲμû<vDTLinuxÁªÃË
C++ Design>>Ò»ÊéµÄTypelistµÄLengthÔªº¯ÊýºÍTypeAtÔªº¯ÊýµÄ½âÊÍ£¬»ù±¾ÉÏÊÇÒ»ÑùµÄ£¬vDTLinuxÁªÃË
ÕâÀï²»ÔÚ½øÐйý¶àµÄ½âÊÍ¡£ÔÚÕâÀïÎÒÃÇËùÖØÊÓµÄÊÇÈçºÎʹÓÃÕâÁ½¸öÔªº¯ÊýÀ´ÊµÏÖÎÒÃǵÄÀàvDTLinuxÁªÃË
ÐͱéÀúËã·¨¡£ÏÖÔÛÍòʾ߱¸ÁË£¬¿ÉÒÔ¿ªÊ¼±¾ÕµÄÖÐÐÄÄÚÈÝ£ºÊµÏÖÀàÐ͵ıéÀúËã·¨£¡²»¹ýÔÚvDTLinuxÁªÃË
¸ø³ö¾ßÌåµÄ´úÂë֮ǰ»¹ÐèÒª×öÒ»¼þÊÂÇ飬ÄǾÍÊǽ«Ö®Ç°µÄ´úÂë±£´æµ½Ò»¸öÎļþÖУ¬ÎªÁËͳvDTLinuxÁªÃË
Ò»Æð¼û£¬ÎÒÃǾÍÏȽ«Õâ¸öÎļþÃûÃüÃûΪmeta.h°É£¡¸ÃÎļþµÄÏêϸÄÚÈÝÔÚ±¾ÎĵÄ×îºó¸ø³ö¡£vDTLinuxÁªÃË
ÏÖÔÚ¿´Ò»ÏÂÈçºÎʵÏÖÎÒÃǵÄÀàÐͱéÀúËã·¨°É£¬¼ûCODE1Ëùʾ£ºvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
vDTLinuxÁªÃË
#ifdef CODE1vDTLinuxÁªÃË
#include vDTLinuxÁªÃË
#include "meta.h"//¸ÃÎļþµÄ¾ßÌåÄÚÈݼû±¾ÎĵÄ×îºóvDTLinuxÁªÃË
namespace xcl = pandaxcl;//ËõдÃû×Ö¿Õ¼ävDTLinuxÁªÃË
//ΪÁËÄܹ»²âÊÔtypeÔªº¯ÊýÐèÒª¶¨ÒåÏÂÃæµÄһЩ¶îÍâµÄ²âÊÔÄ£°å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ÁªÃË
//±ØÐëÍâ¼ÓÒ»²ã°ü¹ü²ãÀ´´«µÝ¶îÍâµÄÀàÐͲÎÊývDTLinuxÁªÃË
template struct ConfigvDTLinuxÁªÃË
{vDTLinuxÁªÃË
        template struct FunctionvDTLinuxÁªÃË
        {vDTLinuxÁªÃË
                static void execute()vDTLinuxÁªÃË
                {vDTLinuxÁªÃË
                        //ÄãµÄ´úÂëÔÚÕâÀï±àдvDTLinuxÁªÃË
                        typedef typename xcl::type::result CT;//µ±Ç°ÀàÐ͵ÄÒâ˼vDTLinuxÁªÃË
                        std::cout << i << " : " << traits::name() << std::endl;vDTLinuxÁªÃË
                }vDTLinuxÁªÃË
        };vDTLinuxÁªÃË
};vDTLinuxÁªÃË
int main()vDTLinuxÁªÃË
{vDTLinuxÁªÃË
        typedef xcl::consvDTLinuxÁªÃË
                xcl::consvDTLinuxÁªÃË
                xcl::consvDTLinuxÁªÃË
                xcl::consvDTLinuxÁªÃË
                xcl::consvDTLinuxÁªÃË
                xcl::consvDTLinuxÁªÃË
                xcl::null_type> > > > > > CONS;vDTLinuxÁªÃË
        std::cout << "CONSÀàÐÍ´®µÄ³¤¶ÈΪ£º" << xcl::length::value << std::endl;vDTLinuxÁªÃË
        xcl::LOOP::Function,0,xcl::length::value,1>::execute();vDTLinuxÁªÃË
        return 0;vDTLinuxÁªÃË
}vDTLinuxÁªÃË
#endif//CODE1vDTLinuxÁªÃË
////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË
//¸Ã³ÌÐòµÄÔËÐнá¹ûΪ£ºvDTLinuxÁªÃË
/********************************************************vDTLinuxÁªÃË
CONSÀàÐÍ´®µÄ³¤¶ÈΪ£º6vDTLinuxÁªÃË
0 : charvDTLinuxÁªÃË
1 : intvDTLinuxÁªÃË
2 : shortvDTLinuxÁªÃË
3 : longvDTLinuxÁªÃË
4 : floatvDTLinuxÁªÃË
5 : doublevDTLinuxÁªÃË
************************************************************/vDTLinuxÁªÃË
////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË
#if 0vDTLinuxÁªÃË
vDTLinuxÁªÃË
    ´ÓCODE1ÖеĴúÂë¿ÉÒÔ¿´³ö£¬ÎÒÃÇÒѾ­³É¹¦µÄʵÏÖÁËÀàÐ͵ÄÑ­»·±éÀú¡£Ö®ËùÒÔÐèҪʵÏÖvDTLinuxÁªÃË
ÕâÖÖ¹¦ÄÜÊÇÒòΪÕâÖÖ¹¦ÄÜÄܹ»ÔÚÏÂÒ»ÕÂÖжÔ×Ô¶¯Éú³ÉµÄ´úÂëÖ´ÐÐÈÎÒâµÄ²Ù×÷£¬ÕâÒ»µãÔÚ×ÔvDTLinuxÁªÃË
¶¯Éú³É´úÂëÉϷdz£ÖØÒª£¬Èç¹ûÕâÒ»µãûÓÐʵÏÖ£¬C++Ä£°åÔª×Ô¶¯Éú³ÉµÄ´úÂëºÍCºêÉú³ÉµÄ´úvDTLinuxÁªÃË
ÂëÏà±È½«²»»áÓÐʲôÉñÆæÖ¸³ö¡£ÕâÒ²ÊÇÎÒ½«Õâ¶ÎÄÚÈݰ²ÅÅÔÚÕâÒ»ÕµÄÖ÷ÒªÔ­Òò¡£¿ÉÄÜÄú»¹vDTLinuxÁªÃË
ûÓÐÈÏʶµ½ÕâÀïµÄ´úÂëµÄÖØÒªÐÔ£¬²»¹ýÕâûʲô¹ØÏµ£¬ÎÒ»áÔÚºóÐøµÄÕ½ÚÖÐÏêϸ˵Ã÷ÕâÀïvDTLinuxÁªÃË
µÄÀàÐͱéÀúµÄʹÓùý³Ì£¬²¢ÊµÏÖ¶¯Ì¬´úÂëºÍ¾²Ì¬´úÂëµÄÁ¬½Ó¡£ÕâÑùÖ®ºóÄú×ÔÈ»¾Í»áÁ˽ⱾvDTLinuxÁªÃË
ÕµÄÒâÒåËùÔÚÁË:)vDTLinuxÁªÃË
    vDTLinuxÁªÃË
    ÏÂÃæ¸ø³öCODE1ÖеÄÍ·Îļþmeta.hµÄÄÚÈÝÈçÏ£ºvDTLinuxÁªÃË
vDTLinuxÁªÃË
#endifvDTLinuxÁªÃË
#ifdef CODE_NOTEvDTLinuxÁªÃË
#pragma oncevDTLinuxÁªÃË
namespace pandaxcl{vDTLinuxÁªÃË
        //////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË
        template vDTLinuxÁªÃË
        struct IFvDTLinuxÁªÃË
        {vDTLinuxÁªÃË
                typedef Then result;//½«ThenÀàÐÍ×÷ΪÌõ¼þÎªÕæµÄ·µ»ØÖµ£¨·µ»ØÖµÎªÀàÐÍ£©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ÁªÃË
                //½øÐмÆË㣬ÒÔÂú×ãÕýÈ·µÄÑ­»·ÓïÒå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ÁªÃË
                //ÒýÈëÁËÒ»¸ö²¼¶ûÐ͵ÄÄ£°å²ÎÊýÓÃÀ´È·¶¨Ñ­»·µÄÖÕÖ¹Ìõ¼þ
 4/11   |‹ ‹‹ 2 3 4 5 6 7 ›› ›|

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