Информация об изменениях

Сообщение Re: Дополнить wrapper новыми методами - как бы вы сделали от 13.10.2023 15:12

Изменено 13.10.2023 15:15 Sm0ke

Re: Дополнить wrapper новыми методами - как бы вы сделали
Здравствуйте, Shmj, Вы писали:

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

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

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

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

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




Если бы m_superStar во ыраппее был protected, то я бы предложил написать свой враппер, отнаследовав его от их враппера (для добавления туда своих методов).
Добавить в свой враппер перегрузку оператора стрелка для доступа к суперстару.
Методы суперстара будут по стрелке. А методы вашего и их врапперов будут по точке.

Или даже авторам их враппера предложить что-нибудь из:
* идею с оператором стрелка
* и идею с помещением m_superStar из private в protected
Или оба варианта

Это один момент.

--

Второе..
В проге:
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());

Этот код можно переписать так:
int main(int argc, const char * argv[])
{
    Wrapper wrapper;
    std::unique_ptr<Wrapper> wrapper2{ wrapper->open() };

Это будет работать?
Re: Дополнить wrapper новыми методами - как бы вы сделали
Здравствуйте, Shmj, Вы писали:

  Скрытый текст
#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;
}


Если бы m_superStar во ыраппее был protected, то я бы предложил написать свой враппер, отнаследовав его от их враппера (для добавления туда своих методов).
Добавить в свой враппер перегрузку оператора стрелка для доступа к суперстару.
Методы суперстара будут по стрелке. А методы вашего и их врапперов будут по точке.

Или даже авторам их враппера предложить что-нибудь из:
* идею с оператором стрелка
* и идею с помещением m_superStar из private в protected
Или оба варианта

Это один момент.

--

Второе..
В проге:
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());

Этот код можно переписать так:
int main(int argc, const char * argv[])
{
    Wrapper wrapper;
    std::unique_ptr<Wrapper> wrapper2{ wrapper->open() };

Это будет работать?