怎么理解元编程
1.一种语言本来做不到的事情,通过你编程来修改它,使得它可以做到了,这就是元编程。
2.就是用代码生成(操纵)代码。
3.常见的开发语言均能做到元编程,Lisp这货就不用多说了,C的Marco,C++的Template,Java的Annotation,C#的Attribute、Reflection、CodeDom和IL Emitter,各种脚本语言(如js、python)的eval,甚至连Unix/Linux的shell脚本也能。
4.元编程常见的应用场景很多,扩展(重构)语法、开发DSL、生成代码、根据特定场景自动选择代码优化、解决一些正交的架构设计问题、AOP等等。
5.所以元编程存在的目的,就是多提供了一个抽象层次。
6.至于元编程有什么优缺点,争议还是比较大的。比如以重构语法的应用为例,很多元编程的反对者就认为这样会导致代码的可读性、可维护性降低,分化社区,影响交流,因为每个开发人员都能搞一个自己的方言。
总的来说,元编程玩得转的话会让你日子好过一些,玩不转会让你日子不好过一些。
#include <iostream.h>
void main()
{
int x,//五元张数
y,//两元张数
z//一元张数
for(x=0x<4x++)
for(y=0y<10y++)
{
if((z=10-x-y)+2*y+5*x==18)
cout<<x<<"张五元"<<y<<"张两元"<<z<<"张一元"<<endl
}
}
//请采纳呦
#include<stdio.h>
main()
{
int x, y, z
int n = 0
for(x=0x<=100x++)
{
for(y=0y<=20y++)
{
for(z=0z<=10z++)
{
if(1*x+5*y+10*z == 100)
{
printf("%d张一元, %d张五元, %d张十元\n",x, y, z)
n++
}
}
}
}
printf("一共%d中组合\n",n)
}
#include<stdio.h>
main()
{
int x,y,z,s,num=0//x,y,z分别表示5元,2元,1元的个数
printf("请输入要兑换的钱数:")
scanf("%d",&s)
for(x=1x<11x++)
for(y=1y<26y++)
for(z=1z<51z++)
{
if((5*x+2*y+z)==s) num++
// printf("五元的个数%d,二元的个数%d,一元的个数%d\n",x,y,z)
}
printf("共有%d种兑换方法!\n",num)
}
模板主要用于库开发,上层开发一般还是不会用的。也就是说游戏可能只有核心部分会用到模板。
dim n5 as integer
dim n10 as integer
for n10=5 to 10
for n5=5 to 20
for n2=5 to 50
if n10*10+n5*5+n2*2=100 then
print "10元:" &n10 &",5元:" &n5 &",2元:" &n2
endif
next
next
next
反射是促进元编程的一种很有价值的语言特性。把编程语言自身作为头等对象(如Lisp或Rebol)也很有用。支持泛型编程的语言也使用元编程能力。
元编程通常有两种方式起作用。一种方式是通过应用程序接口(API)来暴露运行时引擎的内部信息。另一种方法是动态执行包含编程命令的字符串。因此,“程序能编写程序”。虽然两种方法都能用,但大多数方法主要靠其中一种。