£vDTLinuxÁªÃË vDTLinuxÁªÃË#if 0vDTLinuxÁªÃË vDTLinuxÁªÃË ÔÚÉÏһƪÎÄÕµÄ×îºóÌáµ½ÁËÒ»¸öÏà¶ÔÀ´ËµÍ¨ÓÃÒ»µãµÄLOOPÑ»·£¬ÏÂÃæ»¹Êǽ«ÉÏһƪÎÄvDTLinuxÁªÃË ÕÂÖеÄLOOPÑ»·´úÂë¸´ÖÆÈçÏ£ºvDTLinuxÁªÃË vDTLinuxÁªÃË #endifvDTLinuxÁªÃË #ifdef CODE1vDTLinuxÁªÃË #include vDTLinuxÁªÃË template void print()vDTLinuxÁªÃË {//ÕâÀïµÄnÊDZàÒëÆÚµÄ½á¹û£¬¿ÉÒÔÓÃÀ´¶¨ÒåÊý×éµÄvDTLinuxÁªÃË int a[n+1];//Õâô×öÊÇΪÁËÖ¤Ã÷nÊDZàÒëÆÚ³£Á¿vDTLinuxÁªÃË std::cout << sizeof(a)/sizeof(int)-1 << " " ;vDTLinuxÁªÃË }vDTLinuxÁªÃË template struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute(){LOOP::execute();print();}vDTLinuxÁªÃË };vDTLinuxÁªÃË template <>struct LOOP<0>//Ñ»·ÖÕÖ¹Ìõ¼þvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute(){print<0>();}vDTLinuxÁªÃË };vDTLinuxÁªÃË int main()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP<5>::execute();vDTLinuxÁªÃË return 0;vDTLinuxÁªÃË }vDTLinuxÁªÃË #endif//CODE1vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË //³ÌÐòÔËÐнá¹ûÈçÏÂËùʾ:vDTLinuxÁªÃË /*************************************vDTLinuxÁªÃË 0 1 2 3 4 5 vDTLinuxÁªÃË ********************************/vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË #if 0vDTLinuxÁªÃË vDTLinuxÁªÃË ÏÖÔÚËùÐèÒª¿¼ÂǵÄÎÊÌâÊÇÔõô½«ÉÏÃæµÄprintÄ£°åº¯ÊýÊéдµÃ¸üͨÓÃЩ£¬ÒòΪÿ¶¨ÒåÒ»¸övDTLinuxÁªÃË ÐµÄprintº¯Êý¾ÍÐèÒªÖØÐÂÊéдÁ½¸öLOOPÄ£°å£¬ÎªÁ˱ÜÃâÕâÖÖÖØ¸´´úÂëµÃÊéд£¬Ôڴ˺ÜÈÝÒ×ÏëvDTLinuxÁªÃË µ½µÄÊǽ«Õâ¸öprintÄ£°åº¯Êý×÷Ϊģ°å²ÎÊý´«µÝ£¬ºÃÁËÈÃÎÒÃÇ¿ªÊ¼Ðµij¢ÊÔ°É¡£¾ßÌåµÃʾÀý´úvDTLinuxÁªÃË ÂëÈçÏÂËùʾ£ºvDTLinuxÁªÃË vDTLinuxÁªÃË #endifvDTLinuxÁªÃË #ifdef CODE2vDTLinuxÁªÃË #include vDTLinuxÁªÃË //ÏÂÃæµÄÁ½¸öÄ£°å¾Í±ÈCODE1ÀïÃæµÄLOOPÄ£°åͨÓöàÁËvDTLinuxÁªÃË template class Function,size_t i> struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP::execute();vDTLinuxÁªÃË Function::execute();vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË template class Function> struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {vDTLinuxÁªÃË Function<0>::execute();vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË //ΪÁËÄ£°å»¯±ØÐ뽫ÔÀ´µÄÊä³öº¯Êý×ö³ÉÒ»¸öÄ£°å½á¹¹ÌåvDTLinuxÁªÃË template struct FunctionvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {//ÕâÀïµÄnÊDZàÒëÆÚµÄ½á¹û£¬¿ÉÒÔÓÃÀ´¶¨ÒåÊý×éµÄvDTLinuxÁªÃË int a[n+1];//Õâô×öÊÇΪÁËÖ¤Ã÷nÊDZàÒëÆÚ³£Á¿vDTLinuxÁªÃË std::cout << sizeof(a)/sizeof(int)-1 << " " ;vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË //ÏÂÃæÊDzâÊÔ´úÂëvDTLinuxÁªÃË int main()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP::execute();vDTLinuxÁªÃË return 0;vDTLinuxÁªÃË }vDTLinuxÁªÃË #endif//CODE2vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË //³ÌÐòÔËÐнá¹ûÈçÏÂËùʾ:vDTLinuxÁªÃË /******************************************vDTLinuxÁªÃË 0 1 2 3 4 5 vDTLinuxÁªÃË ********************************************/vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË #if 0vDTLinuxÁªÃË vDTLinuxÁªÃË ´ÓCODE2µÄ´úÂëÖпÉÒÔ¿´³ö£¬CODE2ÖеÄLOOPÑ»·½«CODE1ÖеÄprintÄ£°åº¯ÊýÄ£°å²ÎÊývDTLinuxÁªÃË »¯Ö®ºó¾ÍʹµÃCODE2ÖеÄLOOP¸üͨÓÃһЩÁË£¬ÔÚʹÓõÄʱºò½ö½öÖ»ÊÇÐèÒª°´ÕÕFunctionµÄ¹ævDTLinuxÁªÃË ·¶Ð´Ò»¸öÄ£°å½á¹¹¾Í¿ÉÒÔÁË£¬²»±ØÔÙÊéÐ´ÖØ¸´½á¹¹µÄLOOPÁË£¬´Ó¶ø¾«¼òÁËʹÓÃʱÐèÒª±àдvDTLinuxÁªÃË µÄ´úÂëÁ¿¡£µ«ÊÇÎÒÃÇ×¢Òâµ½½á¹û²¢²»¸´ºÏSTLµÄǰ±Õºó¿ªµÄϰ¹ß£¬ÎÒÃÇÒ²²»ÄܺÜÈÝÒ×µÄÀí½âvDTLinuxÁªÃË ²âÊÔ´úÂëmainº¯ÊýÖеÄLOOPµÄÒâÒåÁË£¬ÎªÁ˱ÜÃâʹÓÃÖеĴíÎó±ØÐë¹æ¶¨ºÃËüvDTLinuxÁªÃË µÄÃ÷È·µÄÒâÒ壺vDTLinuxÁªÃË vDTLinuxÁªÃË (1)´Ó0µ½nÑ»·Ö´ÐÐFunction£¬²¢ÇÒÊÇǰ±Õºó¿ªµÄϰ¹ßvDTLinuxÁªÃË vDTLinuxÁªÃË (2)½«FunctionÖ´ÐÐn´Î£¬Ã¿´ÎµÄÕûÐͲÎÊý´Ó0µÝÔö1vDTLinuxÁªÃË vDTLinuxÁªÃË ÎªÁËʹCODE2ÖеÄLOOPÑ»·±í´ïµÄÊÇÕâÁ½¸öÒâÒ壬±ØÐë¶ÔCODE2ÖеÄLOOPÑ»·½øÐиÄдvDTLinuxÁªÃË ¸ÄдºòµÄ´úÂëÈçÏÂËùʾ£ºvDTLinuxÁªÃË vDTLinuxÁªÃË #endifvDTLinuxÁªÃË #ifdef CODE3vDTLinuxÁªÃË #include vDTLinuxÁªÃË //ÏÂÃæµÄÁ½¸öÄ£°å¾Í±ÈCODE1ÀïÃæµÄLOOPÄ£°åͨÓöàÁËvDTLinuxÁªÃË template class Function,size_t i> struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP::execute();vDTLinuxÁªÃË Function::execute();vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË template class Function> struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute(){}vDTLinuxÁªÃË };vDTLinuxÁªÃË //ΪÁËÄ£°å»¯±ØÐ뽫ÔÀ´µÄÊä³öº¯Êý×ö³ÉÒ»¸öÄ£°å½á¹¹ÌåvDTLinuxÁªÃË template struct FunctionvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {//ÕâÀïµÄnÊDZàÒëÆÚµÄ½á¹û£¬¿ÉÒÔÓÃÀ´¶¨ÒåÊý×éµÄvDTLinuxÁªÃË int a[n+1];//Õâô×öÊÇΪÁËÖ¤Ã÷nÊDZàÒëÆÚ³£Á¿vDTLinuxÁªÃË std::cout << sizeof(a)/sizeof(int)-1 << " " ;vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË //ÏÂÃæÊDzâÊÔ´úÂëvDTLinuxÁªÃË int main()vDTLinuxÁªÃË {vDTLinuxÁªÃË //ÏÂÃæµÄÕâÐдúÂë¿ÉÒÔ°´ÕÕÉÏÃæµÄÁ½ÖÖÒâÒåÖ±¹ÛµÄÀí½âΪ£ºvDTLinuxÁªÃË //(1)´Ó0µ½5Ñ»·Ö´ÐÐFunction£¬·¶Î§[0,5)vDTLinuxÁªÃË //(2)½«FunctionÖ´ÐÐ5´Î£¬Ã¿´ÎµÄÕûÐͲÎÊý´Ó0µÝÔö1vDTLinuxÁªÃË LOOP::execute();vDTLinuxÁªÃË return 0;vDTLinuxÁªÃË }vDTLinuxÁªÃË #endif//CODE3vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË //³ÌÐòÔËÐнá¹ûÈçÏÂËùʾ:vDTLinuxÁªÃË /******************************************vDTLinuxÁªÃË 0 1 2 3 4 vDTLinuxÁªÃË *******************************************/vDTLinuxÁªÃË ////////////////////////////////////////////////////////////////////////////////vDTLinuxÁªÃË #if 0vDTLinuxÁªÃË vDTLinuxÁªÃË ´ÓCODE3µÄÔËÐнá¹ûÀ´¿´È·ÊµÂú×ãÁËÎÒÃÇËùÐèÒª±í´ïµÄÃ÷È·µÄÒâÒ壬Òò´Ë´úÂëÀí½âÆðÀ´vDTLinuxÁªÃË ¾Í·Ç³£Ö±¹ÛÁË¡£vDTLinuxÁªÃË vDTLinuxÁªÃË ´ÓCODE3µÄ´úÂëÖÐÎÒÃÇ»¹ÊÇ·¢ÏÖLOOPµÄÆðʼ²ÎÊý¹Ì¶¨Îª0£¬ÕâÒ»µãʵ¼ÊÉÏÒ²ÊÇ¿ÉÒÔ½øÒ»vDTLinuxÁªÃË ²½¸Ä½øµÄ¡£ÏÂÃæÎÒÃǾÍÀ´¿´¿´ÈçºÎʹµÃÆðʼģ°å²ÎÊýÒ²¿ÉÒÔÖ¸¶¨µÄ£¬¼û´úÂëCODE4£ºvDTLinuxÁªÃË vDTLinuxÁªÃË #endifvDTLinuxÁªÃË #ifdef CODE4vDTLinuxÁªÃË #include vDTLinuxÁªÃË //¼ÓÈëÒ»¸öÍ⸲²ãÀ´´«µÝ¶îÍâµÄÄ£°å²ÎÊývDTLinuxÁªÃË template class Function,size_t start,size_t finish>vDTLinuxÁªÃË struct LOOPvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP_BODY::execute();vDTLinuxÁªÃË }vDTLinuxÁªÃË private:vDTLinuxÁªÃË //ÒýÈëÁËÒ»¸ö²¼¶ûÐ͵ÄÄ£°å²ÎÊýÓÃÀ´È·¶¨Ñ»·µÄÖÕÖ¹Ìõ¼þvDTLinuxÁªÃË template struct LOOP_BODYvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {vDTLinuxÁªÃË LOOP_BODYstart)>::execute();vDTLinuxÁªÃË Function::execute();vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË //Ñ»·µÄÖÕÖ¹Óï¾ä£¬Í£Ö¹µÝ¹éÒÔ½áÊøÑ»·vDTLinuxÁªÃË template struct LOOP_BODYvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute(){}vDTLinuxÁªÃË };vDTLinuxÁªÃË };vDTLinuxÁªÃË //ΪÁËÄ£°å»¯±ØÐ뽫ÔÀ´µÄÊä³öº¯Êý×ö³ÉÒ»¸öÄ£°å½á¹¹ÌåvDTLinuxÁªÃË template struct FunctionvDTLinuxÁªÃË {vDTLinuxÁªÃË static void execute()vDTLinuxÁªÃË {//ÕâÀïµÄnÊDZàÒëÆÚµÄ½á¹û£¬¿ÉÒÔÓÃÀ´¶¨ÒåÊý×éµÄvDTLinuxÁªÃË int a[n+1];//Õâô×öÊÇΪÁËÖ¤Ã÷nÊDZàÒëÆÚ³£Á¿vDTLinuxÁªÃË std::cout << sizeof(a)/sizeof(int)-1 << " " ;vDTLinuxÁªÃË }vDTLinuxÁªÃË };vDTLinuxÁªÃË //ÏÂÃæÊDzâÊÔ´úÂëvDTLinuxÁªÃË int main()vDTLinuxÁªÃË {vDTLinuxÁªÃË //ÏÂÃæµÄÕâÐдúÂë¿ÉÒÔÖ±¹ÛµÄÀí½âΪ£ºvDTLinuxÁªÃË //(1)´Ó1µ½5Ñ»·Ö´ÐÐFunction£
|