2009-05-18 2 views
2

Simulink 모델을 기반으로 실시간 워크샵에서 만든 C 모듈이 있습니다. outputarray의 내용을 바탕으로C 함수에 대해 OO 스타일 인터페이스를 모델링하는 방법은 무엇입니까?

int init(); 
int calc(double *inputarray, double *outputarray); 
int term(); 

, 내가 OutputThing라는 클래스를 모델링 할 수있다 : 이 모듈은 세 가지 공공 기능을 제공합니다.

이러한 함수를 WrapperModule이라는 래퍼 클래스에 통합하려고합니다. 는 지금은 다음과 같습니다 클래스가 있습니다

class WrapperModule { 
public: 
    int initialize(); 
    OutputThing calc(...); 
    int terminate(); 
}; 

내 문제가 제대로 CALC() 함수에 대한 래퍼 방법을 설계하는 방법이다. 을 사용하여 배열/벡터를 단일 인수로 사용하여 메서드를 만드는 것을 피하고 싶습니다. 그러나 벡터에서 올바른 인수 인 을 식별하는 것은 까다 롭습니다. 6 개 이상의 인수가있는 메소드를 사용한다는 생각을 싫어합니다.

버트 랜드 마이어 (Bertrand Meyer)는 OOSC 서적에서 세터 (setter) 방법의 사용을 제안합니다. 다음과 같음 :

class WrapperModule { 
public: 
    int initialize(); 
    void set_foo(double f); 
    void set_bar(double b); 
    OutputThing calc(); 
    int terminate(); 
}; 

아이디어가 있으십니까? 어떤 접근 방식이 더 좋을지 모르겠습니다.

+0

내 대답은 init()이 일회성 초기화 함수이고 term()이 일회 종료 함수이며 init()과 term 사이에서 calc()를 여러 번 호출 할 수 있다고 가정합니다.(). 이 올바른지? –

답변

3

inputarrayInputThing 클래스로 추상화 할 수있는 경우 다음을 제안합니다. 이것은 또한 C++ 구조/파괴를 사용하여 초기화/종료를보다 잘 캡슐화합니다.

class WrapperModule { 
public: 
    // Calls init() 
    WrapperModule(); 

    // Calls term() 
    ~WrapperModule(); 

    // Calls calc() 
    OutputThing calculate(const InputThing& inputThing); 
}; 

필요한 경우

, InputThing는 많은 인수를 복용 생성자를 필요 방지하기 위해 접근 및 뮤 테이터를 (/ 세트를 얻을) 기능을 가질 수있다.

+0

InputThing 및 OutputThing은 std :: vector 일 수 있습니다. C 스타일 기능과 함께 사용할 수 있습니다. 항목이 연속 된 메모리 위치에 있음을 보장합니다. – Naveen

+1

또한, 계산 함수와 밀접하게 연결된 InputThing과 OutputThing이 모두 WrapperModule 클래스의 내부 클래스로 정의되는 것이 가장 좋다고 생각합니다. – xtofl

+0

@Naveen Jens는 OutputThing을 사용하여 모델링하고자하는 출력 배열에 구조가 있다는 것을 그의 질문에서 제안합니다. 그래서 double의 벡터는 그것을 잘라 내지 못할 것입니다. 이 작업을 수행하는 것은 InputThing에 대해 의미가 있습니다. –

관련 문제