Дополнить wrapper новыми методами - как бы вы сделали
От: Shmj Ниоткуда  
Дата: 13.10.23 05:40
Оценка:
Есть 2 библиотеки. Одна официальная — 10 тыс. звезд. Вторая — враппер над основным классом этой библиотеки — 100 звезд.

Вот именно так сделано, это 100% отражает суть проблемы. Фукнция open не статическая (но вряд ли это чем поможет):

  Скрытый текст
#include <iostream>

class SuperStarClass1
{
public:
    void superFun1() { std::cout << "1 \r\n"; }
    void superFun2() { std::cout << "2 \r\n"; }
};

class Wrapper
{
public:
    Wrapper* open()
    {
        Wrapper* wrapper = new Wrapper();
        wrapper->m_superStar = std::make_unique<SuperStarClass1>();

        return wrapper;
    }
    void wrapperFun() {m_superStar->superFun1();}
private:
    std::unique_ptr<SuperStarClass1> m_superStar;
};

int main(int argc, const char * argv[])
{
    std::unique_ptr<Wrapper> wrapper = std::make_unique<Wrapper>();
    std::unique_ptr<Wrapper> wrapper2 = std::unique_ptr<Wrapper>(wrapper->open());
    wrapper2->wrapperFun();
    //wrapper2->m_superStar->superFun2();
    
    return 0;
}


Wrapper по сути скрывает и не оставляет возможности доступа к функциям оригинальной библиотеки, а такой доступ нужен.

Изначально был сделан форк этого Wrapper, куда я добавил нужные функции.

Однако проблема вот в чем — этот Wrapper часто обновляется, выходят новые версии с исправлениями ошибок. И каждый раз поддерживать форк — накладно.

Как бы сделать, чтобы была обертка над этим Wrapper из нескольких функций, которым требуется доступ к объекту m_superStar? Как это седлать малой кровью?

Тут стоить добавить, что на использовании этого Wrapper категорически настаивает начальник.

Какие есть идеи?

Будет ли хорошей идеей такое решение: https://habr.com/ru/articles/762250/

Как бы сделали вы?
Отредактировано 13.10.2023 6:05 Shmj . Предыдущая версия . Еще …
Отредактировано 13.10.2023 5:55 Shmj . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.