Проблема с техникой оболочки, которую вы описываете, состоит в том, что ваша оболочка прозрачна (в истинном смысле этого слова) - каждый метод в библиотеке все еще виден вам через оболочку, с той же семантикой, той жепредварительные условия и т. д. Вы можете "видеть сквозь" свою оболочку.
Такая прозрачная оболочка полезна вам только в том случае, если вы когда-нибудь переключите базовую библиотеку на что-то с идентичной семантикой или, по крайней мере, почти идентичнойсемантика.Рассмотрим этот пример.Скажем, библиотека была std :: fstream, и вашему приложению нужно было читать и записывать файлы, и предположим, что вы старательно написали обертку:
class MyFile {
std::fstream* fst;
public:
void writeData(void* data, size_t count) {
fst->write((const char*) data, count);
}
void readData(void* buffer, size_t count) {
fst->read((char*) data, count);
}
// etc, etc.
};
Теперь, допустим, вы хотите (или должны)переключиться на асинхронный ввод / вывод с неблокирующим чтением и записью.Просто нет никакой возможности, чтобы ваша прозрачная оболочка помогла вам сделать этот переход.Асинхронное чтение требует двух методов: один для запуска операции чтения и один для подтверждения того, что чтение завершено.Это также требует от приложения принятия обязательства, что буфер не будет использоваться между этими двумя вызовами методов.
Когда все сказано и сделано, оболочка интерфейса библиотеки полезна, только если очень тщательно разработана, чтобы не быть прозрачной (хорошие интерфейсы непрозрачны).Кроме того, чтобы быть полезным, библиотека, которую вы упаковываете, должна быть чем-то, с чем вы хорошо знакомы.Таким образом, boost :: filesystem может «обернуть» имена путей как для DOS, так и для Unix, потому что авторы хорошо знают пути POSIX, UNIX и DOS и разрабатывают «оболочку» для эффективной инкапсуляции этих реализаций.
Из того, что вы описали, мне кажется, что ваши усилия в конечном итоге будут напрасными.Простое лучше, чем сложное, и если оболочка действительно не инкапсулирует что-то (то есть скрывает основную библиотеку), прямое лучше, чем косвенное.
Это не лицензия для написания спагетти - вашему приложению все еще нужна структура иизоляция основных компонентов (например, изолировать пользовательский интерфейс от фактических расчетов / моделирования / документа, которые предоставляет ваше приложение).Если вы все сделаете правильно, замена библиотеки однажды станет управляемой задачей без какого-либо кода-обертки.