Расширить приложение без изменения основного метода? - PullRequest
0 голосов
/ 26 октября 2010

Мне нужно расширить несколько классов в моем приложении на C ++ без изменения кода в приложении. (Продукт распространяется как решение). Есть ли определенный шаблон дизайна для этого?

Ответы [ 2 ]

3 голосов
/ 26 октября 2010

Ваш вопрос немного расплывчатый. Чтобы расширить приложение без изменения какого-либо кода, приложение должно было бы предоставить специальный механизм для расширяемости, например, плагин системы .

0 голосов
/ 26 октября 2010

Это зависит от того, что вы можете расширить. Было бы хорошо, если расширение требует повторной ссылки кода? Если все в порядке, вы можете использовать фабричный метод и полиморфизм.

struct Extension {
    virtual ~Extension() { }
    // ...
};

Extension* load_extension()
{
    ifstream config_file(".conf");
    string line;
    getline(config_file, line);
    if( line == "this extension" ) return new ThisExtension();
    else if( line == "that extension" ) return new ThatExtension();
    // else if ...
    else return NoExtension();
}

Здесь, чтобы создать новое расширение, все, что вам нужно сделать, это подкласс из Extension и добавить строку в метод фабрики. Это повторная компиляция одного файла и повторная компоновка проекта.

Если перекомпоновать приложение неправильно, вы можете загрузить динамическую библиотеку во время выполнения .

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