스크립팅 시스템에 노출 된 C ++ 기능 - 자체 설명 매개 변수 유형

StackOverflow https://stackoverflow.com/questions/2039152

  •  19-09-2019
  •  | 
  •  

문제

C ++ 규칙 엔진은 각 규칙이 "x, y"로 귀결되는 XML의 규칙을 정의합니다. 여기서 x는 일련의 테스트 세트이고 일련의 동작입니다. C ++ 코드에서 '기능'은 테스트/작업에서 사용할 수있는 '기능'은 각 '함수'에 대한 클래스로 생성되며 각각 "run (args)"메소드가 있습니다. 각 매개 변수 세트를 가져옵니다.

이것은 잘 작동합니다.

그러나 별도의 도구는 XML을 수동으로 제작하는 사용자를 저장하기를 원합니다. 규칙 엔진은 비 프로그래머를 대상으로합니다. 이 도구는 필요한 모든 '기능'과 필요한 입력 매개 변수를 알아야합니다. 이 작업을 고려하는 가장 좋은 방법은 무엇입니까? 나는 몇 가지 가능성을 고려했습니다.

  1. 구성 파일은 '함수'및 해당 매개 변수를 설명하고 도구에서 읽습니다. 이것은 매우 쉽고 실제 C ++ 코드는이를 사용하여 인수 검증을 수행 할 수 있지만 여전히 C ++ 및 XML은 동기화되지 않습니다. 프로그래머는 C ++를 수정하고 XML을 업데이트하는 것을 잊어 버릴 수 있습니다.
  2. 각 '기능'클래스에는이를 설명하는 방법이 있습니다. 어떻게 든 공구는 C ++ 클래스를로드합니다 ... 이것은 반사를 지원하는 언어로 쉽지만 C ++에서는 쉬운 일이 될 것입니다. 여분의 오버 헤드를 의미합니다.

C ++의 특성을 고려할 때 어떤 의미가 있습니까?

편집 : 제목이 설명 적입니까? 나는 더 나은 것을 생각할 수 없다.

도움이 되었습니까?

해결책

3 번째 길이 있습니다 -IDL.

클라이언트-서버 앱이 있다고 상상하고 클라이언트 및 서버에 배포 할 수있는 래퍼 클래스를 생성하는 코드 생성기가있어서 사용자가 클라이언트 API를 사용하여 앱을 작성할 수 있고 프로세싱이 서버에서 발생할 수 있습니다. 일반적인 RPC 시나리오이며 DCE-RPC, ONC-RPC, CORBA, COM 및 기타에서 사용됩니다.

여기서 요령은 클라이언트가 호출 할 수있는 메소드의 서명을 정의하는 것입니다. 이는 인터페이스 정의 언어로 수행됩니다. 이것은 어렵지 않지만 클라이언트/서버 API의 소스이며 생성기를 통해 실행하고 클라이언트가 사용할 수있는 C ++ 클래스를 생성합니다.

귀하의 경우 XML이 IDL 인 것 같습니다. 따라서 XML을 취하고 코드가 노출되는 기능을 설명하는 C ++ 헤더를 생성하는 도구를 만들 수 있습니다. CPP 파일을 생성 할 필요는 없지만 헤더를 생성하기가 더 쉽기 때문에 새 기능/매개 변수를 추가하는 프로그래머는 구현을 업데이트하는 것을 잊을 수 없습니다. 헤더가 일단 컴파일하지 않아도됩니다. 재생되었습니다.

함수 정의보다 더 많은 경우 기존 C ++ 헤더로 #included 인 헤더를 생성 할 수 있습니다.

그래서 - 그것이 나의 제안입니다. #3 : 당신의 결정적인 XML 서명에서 정의를 생성하십시오.

다른 팁

다른 방법이 있습니다.

  • 인수 유형이 함수 호출에서 균일하다는 제약을 추가하십시오.
  • 일부 인수 수를 정의하십시오
  • 유형과 우선 순위를 설명하십시오 double 통합 String 그러나 그 반대는 아닙니다

그럼 당신은 가지고 있습니다

void f(int a1) .. f(int a1 .. int aN)
void f(double a1) .. f(double a1 .. double aN)
..
void f(T a1) .. 

문자열, 날짜 등과 같은 기타 구체적인 데이터 유형

장점 :

  • 시그니처 고정 및 규칙의 변형
  • "가장 큰"유형 서명 (t) 만 제공 할 수 있습니다.
  • 템플릿 및 언어 다리와 잘 어울립니다
  • 경고 할 수 있습니다 2 개의 정수 매개 변수가있는 조치 f 정의되지 않았습니다
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top