Wrapper по сути скрывает и не оставляет возможности доступа к функциям оригинальной библиотеки, а такой доступ нужен.
Изначально был сделан форк этого Wrapper, куда я добавил нужные функции.
Однако проблема вот в чем — этот Wrapper часто обновляется, выходят новые версии с исправлениями ошибок. И каждый раз поддерживать форк — накладно.
Как бы сделать, чтобы была обертка над этим Wrapper из нескольких функций, которым требуется доступ к объекту m_superStar? Как это седлать малой кровью?
Тут стоить добавить, что на использовании этого Wrapper категорически настаивает начальник.
Здравствуйте, Shmj, Вы писали:
S>Как бы сделать, чтобы была обертка над этим Wrapper из нескольких функций, которым требуется доступ к объекту m_superStar? Как это седлать малой кровью? S>Какие есть идеи? S>Как бы сделали вы?
Сделал бы PR для Wrapper-а в котором добавил бы в Wrapper публичный метод для доступа к SuperStarClass1:
И объяснил в описании к PR (или в обсуждении этого PR) зачем метод access_undelying_object нужен и почему вам нужен доступ к m_superStart.
Лучше всего было бы привести несколько конкретных use-case с примерами кода: мол, сейчас приходится извращаться вот так, а можно было бы обойтись малой кровью.
Re: Дополнить wrapper новыми методами - как бы вы сделали
почему бы и нет? В долгосрочной перспективе конечно можно ноги пострелять. Н-р завтра m_superStar захотят прикрыть мьютексом, а ваш Паблик Морозов разумеется про него ничего знать не будет. Но это всё в теории, надо оценивать и взвешивать всё на месте.
Re: Дополнить wrapper новыми методами - как бы вы сделали
Здравствуйте, Shmj, Вы писали:
S>Тут стоить добавить, что на использовании этого Wrapper категорически настаивает начальник.
Так если на это выделены средства, то почему нет?
Re: Дополнить wrapper новыми методами - как бы вы сделали
Если бы m_superStar во враппере был protected, то я бы предложил написать свой враппер, отнаследовав его от их враппера (для добавления туда своих методов).
Добавить в свой враппер перегрузку оператора стрелка для доступа к суперстару.
Методы суперстара будут по стрелке. А методы вашего и их врапперов будут по точке.
Или даже авторам их враппера предложить что-нибудь из:
* идею с оператором стрелка
* и идею с помещением m_superStar из private в protected
Или оба варианта
Здравствуйте, Shmj, Вы писали:
S>Есть 2 библиотеки. Одна официальная — 10 тыс. звезд. Вторая — враппер над основным классом этой библиотеки — 100 звезд.
Если эти библиотеки публичные, то просто назови их! И к каким функциям понадобился прямой доступ.
Возможно, мы совместным умом найдём правильный подход, вместо форка с хаком и паблика морозова.
В крайнем случае, есть же такой подход
— делаешь форк
— вносишь как можно меньшие правки — например, делаешь функцию публичного доступа к потрохам (хоть это и грязно)
— а потом ребейзишь / черрипикаешь эти правки на свежую версию основной репы (ну или наоборот, черрипикаешь из основной репы к себе)
один леший, поскольку правка изолированная, то конфликтов почти никогда не будет.
Этот процесс даже автоматизировать можно, в конце концов.
Дальше уже нюансы, как именно организованы репы в вашей компании. Всякие там субрепозитории, прочие радости...
Перекуём баги на фичи!
Re: Дополнить wrapper новыми методами - как бы вы сделали
Здравствуйте, Shmj, Вы писали:
S>Как бы сделали вы?
Ну вообще я бы сделал как считаю нужным. Всякие врапперы я не одобряю, поэтому я бы их не использовал. Если начальник настаивает, то флаг ему в руки, а я на другой проект пойду, или в другую компанию, как говорится, если что-то не нравится, HR-ов за забором очередь стоит.
Но если отвечать на технический вопрос — вытащил бы указатель, не в астрале же он лежит, скорей всего по вполне определённому смещению. Понятно, что решение такое себе, ну как говорится, на такое ТЗ и результат ХЗ. В конкретном билде работать будет, а завтра сами разбирайтесь.
Re[2]: Дополнить wrapper новыми методами - как бы вы сделали
Здравствуйте, vsb, Вы писали:
vsb>Ну вообще я бы сделал как считаю нужным. Всякие врапперы я не одобряю, поэтому я бы их не использовал. ...
to TS:
А дорого ли будет заделать свой аналог суперстара? И даже чтобы стало лучше, чем во враппере?
Когда сам пользуешься своей же либой, то казлось бы виднее чего там нехватает.