Как смоделировать интерфейс стиля OO для функций C? - PullRequest
2 голосов
/ 18 мая 2009

У меня есть модуль C, созданный в мастерской в ​​реальном времени на основе модели Simulink. Эти модули предоставляют три общедоступные функции:

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

На основе содержимого массива output я могу смоделировать класс с именем OutputThing.

Я хочу интегрировать эти функции в класс-оболочку под названием WrapperModule. Прямо сейчас у меня есть класс, который выглядит так:

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

Моя проблема в том, как правильно спроектировать метод-обертку для функции calc (). Я хочу избежать создать метод с массивом / вектором в качестве единственного аргумента. Но определить правильные аргументы из вектора сложно, и мне не нравится идея иметь метод с 6 или более аргументами.

Бертран Мейер в своей книге OOSC предлагает использовать методы сеттера. Что-то вроде:

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

Есть идеи? Я не уверен, какой подход будет лучше.

1 Ответ

3 голосов
/ 18 мая 2009

Если вы также можете абстрагировать inputarray в класс InputThing, я бы предложил следующее. Это также лучше инкапсулирует инициализацию / завершение, используя конструкцию / уничтожение C ++.

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

    // Calls term()
    ~WrapperModule();

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

При необходимости InputThing может иметь функции доступа и мутатора (get / set) для предотвращения необходимости использования конструктором множества аргументов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...