메타 프로그래밍 몇 가지 질문이 있습니다. C ++에서 리플렉션 사용

방금 C ++ 개발자로 여행을 시작했으며 최근에는 메타 프로그래밍이라는 주제를 연구하고 있습니다. 지금까지이 주제에 대한 많은 정보를 살펴 보았으며 몇 가지 질문이 있습니다.

  1. C ++에서 리플렉션 사용 : 가능합니까? 내 이해에 따르면 리플렉션은 프로그램 상태를 조작 할 수있는 메타 프로그래밍 기술이며 그 조작은 내성 또는 내성 일 수 있습니다.

  2. 반사 아키텍처와 메타 레벨 아키텍처의 차이점은 무엇입니까? 메타 프로그래밍 아키텍처는 어떤 범주에 속합니까?

  3. 메타 프로그래밍은 메타 수준과 기본 수준의 두 가지 수준으로 제공됩니다. 내 이해에 따르면, 조사중인 객체 프로그램이나 시스템은 기본 수준이며 조사중인 시스템에서 작동 할 메타 프로그램은 메타 수준입니다. 제가 맞습니까?

또한 C ++에서 템플릿 메타 프로그래밍 작업에 대한 지침을 제공하여 도와주세요.
이 프로그래밍 기술을 실습하기 위해 찾을 수있는 실행 가능한 예제를 제안 해 주시겠습니까?



답변

메타 프로그래밍은 단순히 다른 코드를 작성하는 코드를 광범위하게 작성할 수 있다는 의미입니다. C ++은 기본적으로 형식 안전 매크로 언어 인 템플릿 메커니즘을 통해이를 수행합니다. 템플릿 확장 단계를 적용하는 것이 완벽하게 가능하며 결과는 템플릿이없는 유효한 C ++ 코드입니다.

리플렉션 은 프로그래밍 언어 및 / 또는 런타임 환경에서 런타임에 자체 언어 요소를 검사 (및 종종 수정)하는 기능입니다. 일반적으로 리플렉션 언어는 클래스, 메서드, 변수, 매개 변수 등과 같은 언어 요소와이를 검사, 수정 및 생성하는 루틴 또는 클래스를 나타내는 데이터 구조를 제공합니다. 수정 기능은 다른 코드를 생성하는 코드를 작성할 수 있으므로 리플렉션을 메타 프로그래밍 유형으로 만듭니다.

메타 프로그래밍의 다른 예로는 코드 생성기, 자체 수정 바이너리 (20 년 전처럼 더 이상 인기가 없지만), C 매크로; 카레와 비슷한 기능 프로그래밍 기술도 일종의 메타 프로그래밍이라고 주장 할 수 있습니다.


답변

  1. 아뇨. C ++ 프로그램은 머신 코드로 컴파일되고 클래스 등에 대한 모든 정보가 손실됩니다 (.NET 환경에서 C ++ / CLI를 사용하지 않는 한 순수 C ++은 아닙니다).

2-3. 모르겠다-도움이되는 다른 답변을 기다립니다 🙂

C ++ 템플릿을 사용한 메타 프로그래밍은 매우 강력하지만 복잡합니다. 템플릿 확장에는 C ++에서 사용하는 명령형 프로그래밍보다는 기능적 프로그래밍 스타일이 필요합니다. 함수형 프로그래밍에 대한 이전 경험이 없다면 우회하여 기본적인 리스프, 하스켈 또는 체계를 배우는 것이 좋습니다.