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

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

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

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() };

Это будет работать?
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() };

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