2009-05-18 8 views
2

Simulinkモデルに基づいてリアルタイムワークショップで作成されたCモジュールがあります。 outputarrayの内容に基づいてC関数のOOスタイルインターフェイスをモデル化する方法は?

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

、私はOutputThingというクラスをモデル化することができます。 このモジュールは、3つのパブリックな機能を提供します。

これらの関数をWrapperModuleというラッパークラスに統合したいと考えています。私の問題は、適切CALC()関数のラッパーメソッドをどのように設計するか、である

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

: は今、私はこのようになりますクラスを持っています。 を避けて、配列/ベクトルを1つの引数として持つメソッドを作成します。しかし、ベクトルからの正しい引数 の特定は難しいので、私は6つ以上の引数を持つメソッドを持つという考え方は嫌いです。

彼のOOSCの本のBertrand Meyerは、セッターメソッドの使用を示唆しています。次のようなもの:

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

アイデア?どんなアプローチが良いか分かりません。

+0

私の答えでは、init()は1回の初期化関数でterm()は1回限りの終了関数で、calc()はinit()とterm ()。これは正しいです? –

答えて

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

また、calculate関数に密接に関連しているInputThingとOutputThingの両方がWrapperModuleクラスの内部クラスとして定義されているのが最良だったと思います。 – xtofl

+0

@Naveen Jensは、OutputThingでモデル化したい出力配列の構造がいくつかあるので、double型のベクトルはそれをカットできないことを示唆しています。これを行うことは、InputThingには意味があるかもしれません。 –

関連する問題