나에게 메타 프로그래밍은 "프로그램을 작성하는 프로그램"입니다. 이 일반화을 지원하기 때문에
메타 프로그래밍, 재사용을 위해 특히 좋다 : 당신은 특정 패턴에 속하는 개념의 가족을 정의 할 수 있습니다. 그런 다음 변동성을 통해 유사하지만 다른 시나리오에서 해당 개념을 적용 할 수 있습니다. @Sjoerd에서 언급 한 바와 같이
가장 간단한 예는 자바의 getter 및 setter입니다 :
getter 및 setter 잘 정의 된 패턴에 따라 둘 : 게터는 클래스 멤버를 반환하고, 세터는 클래스 멤버의 값을 설정합니다 . 일반적으로 템플릿을이라고하며 특정 패턴을 적용하고 다시 사용할 수 있도록합니다. 템플릿의 작동 방식은 사용되는 메타 프로그래밍/코드 생성 방식에 따라 다릅니다.
게터 또는 설정자가 약간 다른 방식으로 동작하게하려면 템플릿에 매개 변수를 추가 할 수 있습니다. 이것은 변동성입니다. 예를 들어, 설정/가져올 때 추가 처리 코드를 추가하려는 경우 가변 블록 매개 변수로 코드 블록을 추가 할 수 있습니다. 사용자 정의 코드와 생성 된 코드를 혼합하는 것은 까다로울 수 있습니다. ABSE은 현재 사용자 지정 코드를 기본적으로 템플릿 매개 변수로 지원한다는 것을 알고있는 유일한 MDSD 접근 방식입니다.
무엇이 좋나요? 절대적으로 아무것도. – Radu
가능한 중복 http://en.wikipedia.org/wiki/War_(Edwin_Starr_song) – Tom
몇 가지 대답이 지적했듯이 설명이 올바르지 않습니다. 귀하의 설명은 반영 및 측면 지향 프로그래밍 (AOP)을 참조하는 것으로 보입니다. 이 두 언어는 런타임에 언어 기능을 확장합니다. 메타 프로그래밍은 컴파일 타임에 언어의 기능을 확장합니다. 특히 형식 시스템에서 유형을 조작 할 수있는 기능이 확장되었습니다.반대로 Reflection은 런타임에 유형에 대한 조작 기능을 추가합니다. – rwong