Это зависит от того, что вы можете расширить. Было бы хорошо, если расширение требует повторной ссылки кода? Если все в порядке, вы можете использовать фабричный метод и полиморфизм.
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
и добавить строку в метод фабрики. Это повторная компиляция одного файла и повторная компоновка проекта.
Если перекомпоновать приложение неправильно, вы можете загрузить динамическую библиотеку во время выполнения .