Re: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.03.24 12:13
Оценка:
Здравствуйте, Marty, Вы писали:

В общем, решил сделать на интерфейсах и shared_ptr, но не показывать их пользователю, а обернуть в value-классы, получается что-то типа pimpl'а:

struct Cursor
{

    Cursor() = delete;
    Cursor(const Cursor&) = default;
    Cursor& operator=(const Cursor&) = default;
    Cursor(Cursor&&) = default;
    Cursor& operator=(Cursor&&) = default;

    Cursor(std::shared_ptr<ICursor> pimpl) : m_pImpl(pimpl) {}

protected:

    std::shared_ptr<ICursor>  m_pImpl;

};


В принципе, если захочется в жоский эмбед портануть, то можно будет выкинуть пимплы, и запилить туда непосредственную реализацию, при этом внешний интерфейс для пользователя останется тем же самым, и прикладной код можно будет переносить как есть
Маньяк Робокряк колесит по городу
Re[2]: Интерфейсы и реализации
От: qaz77  
Дата: 06.03.24 13:33
Оценка:
Здравствуйте, Marty, Вы писали:
M>value-классы

M>
struct Cursor
M>{

M>    Cursor() = delete;
M>    Cursor(const Cursor&) = default;
M>    Cursor& operator=(const Cursor&) = default;
M>    Cursor(Cursor&&) = default;
M>    Cursor& operator=(Cursor&&) = default;

M>    Cursor(std::shared_ptr<ICursor> pimpl) : m_pImpl(pimpl) {}

M>protected:

M>    std::shared_ptr<ICursor>  m_pImpl;

M>};


Я бы сказал не value, а handle-классы.
Тут же несколько экземпляров при копировании будут шарить одну реализацию.
А value-семантика — это когда полностью независимые и равные объекты получаются.
В данном примере глубокое копирование понадобиться (через виртуальный метод clone, например).

Я, конечно, не знаю специфики вашей задачи, но для pimpl бы использовал unique_ptr.
Re[3]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.03.24 13:37
Оценка:
Здравствуйте, qaz77, Вы писали:


Q>Я бы сказал не value, а handle-классы.

Q>Тут же несколько экземпляров при копировании будут шарить одну реализацию.
Q>А value-семантика — это когда полностью независимые и равные объекты получаются.

Да, согласен.


Q>В данном примере глубокое копирование понадобиться (через виртуальный метод clone, например).


Q>Я, конечно, не знаю специфики вашей задачи, но для pimpl бы использовал unique_ptr.


Небольшая либа контролов поверх самопального канваса. shared_ptr — потом это всё будет биндится в скриптовый движок, и как оно там унутре работает — для меня сие загадка большая, а разбираться — лень Но с shared_ptr всё нормас работает
Маньяк Робокряк колесит по городу
Re[2]: Интерфейсы и реализации
От: rg45 СССР  
Дата: 06.03.24 15:06
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>
struct Cursor
M>{

M>    Cursor() = delete;
M>    Cursor(const Cursor&) = default;
M>    Cursor& operator=(const Cursor&) = default;
M>    Cursor(Cursor&&) = default;
M>    Cursor& operator=(Cursor&&) = default;

M>    Cursor(std::shared_ptr<ICursor> pimpl) : m_pImpl(pimpl) {}

M>protected:

M>    std::shared_ptr<ICursor>  m_pImpl;

M>};



А зачем так многословно? Абсолютно то же самое можно было получить гораздо лаконичнее, вот стопроцентный эквивалент:

struct Cursor
{
   Cursor(std::shared_ptr<ICursor> pimpl) : m_pImpl(pimpl) {}

protected:

  std::shared_ptr<ICursor>  m_pImpl;

};


Ну и конструктор я бы объявил как explicit.
--
Не можешь достичь желаемого — пожелай достигнутого.
Отредактировано 06.03.2024 15:07 rg45 . Предыдущая версия .
Re[3]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.03.24 15:49
Оценка:
Здравствуйте, rg45, Вы писали:

R>А зачем так многословно? Абсолютно то же самое можно было получить гораздо лаконичнее, вот стопроцентный эквивалент:


Согласен.
Маньяк Робокряк колесит по городу
Re[3]: Интерфейсы и реализации
От: Kernan Ниоткуда https://rsdn.ru/forum/flame.politics/
Дата: 06.03.24 18:49
Оценка:
Здравствуйте, Marty, Вы писали:

M>А можно без тебя как-нибудь?

А ведь он прав...
Sic luceat lux!
Re[4]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 06.03.24 18:56
Оценка:
Здравствуйте, Kernan, Вы писали:

M>>А можно без тебя как-нибудь?

K>А ведь он прав...

И без тебя тоже?
Маньяк Робокряк колесит по городу
Re[3]: Интерфейсы и реализации
От: reversecode google
Дата: 06.03.24 19:41
Оценка: -2
марти хочет показать какой он современный
и пытается задействовать все плюшки современных плюсов
выходит неуклюже
даже на с++98 можно писать по круче с++20
если красиво сделана декомпозиция
Re[5]: Интерфейсы и реализации
От: reversecode google
Дата: 06.03.24 19:44
Оценка:
- дохтор, меня все пытаются поучать
— поциент, вы себе льстите
Re[5]: Интерфейсы и реализации
От: CreatorCray  
Дата: 07.03.24 06:40
Оценка:
Здравствуйте, Marty, Вы писали:

M>>>У меня есть проект с движком squirrel, туда shared_ptr<IInterface> прокидывается

CC>>А внутри как используется?
M>В смысле?
Ну, что с ним дальше внутри белки происходит?
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[5]: Интерфейсы и реализации
От: CreatorCray  
Дата: 07.03.24 06:40
Оценка:
Здравствуйте, Marty, Вы писали:

CC>>Ну т.е. что оно делает?

M>Десктопный софт
Ты хочешь сказать что оно делает десктоп?

M>Мой потенциальный потребитель — человек не богатый, не компьютерщик, и дома у него легко может оказаться Win7 на x86, а то и та самая XP

А телеметрия хоть есть какая или feedback чтоб понять чем твоя клиентура на самом деле пользуется?
А то может быть там всё куда новее чем ты думаешь.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[6]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.03.24 10:57
Оценка:
Здравствуйте, CreatorCray, Вы писали:

M>>>>У меня есть проект с движком squirrel, туда shared_ptr<IInterface> прокидывается

CC>>>А внутри как используется?
M>>В смысле?
CC>Ну, что с ним дальше внутри белки происходит?

Ну, в целом, в белке самой объекты шарятся, для глубокого копирования надо делать clone. С другой стороны, я возвращаю туда классы по значению, и пока оно долетает до того места, куда приземлиться, конструктора разные вызываются. Поэтому вараинт с шаредом стопроцентно рабочий, а глубже копать мне было лень, раз с шаредом нормально работает
Маньяк Робокряк колесит по городу
Re[6]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.03.24 11:03
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>>>Ну т.е. что оно делает?

M>>Десктопный софт
CC>Ты хочешь сказать что оно делает десктоп?

Нет, извини, я просто не слишком точно ответил на твой вопрос


CC>А телеметрия хоть есть какая или feedback чтоб понять чем твоя клиентура на самом деле пользуется?


Фидбэк какой-то есть. Ходил как-то на курсы бухгалтеров, общался с одногрупниками, видел, какие там компы в учебном центре. Опять же, есть некоторое количество знакомых некомпьютерщиков, и я видел, какие у них дома стоят компы


CC>А то может быть там всё куда новее чем ты думаешь.


Или нет
Маньяк Робокряк колесит по городу
Re[7]: Интерфейсы и реализации
От: CreatorCray  
Дата: 07.03.24 14:24
Оценка:
Здравствуйте, Marty, Вы писали:

M>Нет, извини, я просто не слишком точно ответил на твой вопрос

Ты совсем на него не ответил, и похоже не собираешься.
Просто так и ответь "не скажу, секрет", а не ходи вокруг да около

M>Фидбэк какой-то есть. Ходил как-то на курсы бухгалтеров, общался с одногрупниками, видел, какие там компы в учебном центре. Опять же, есть некоторое количество знакомых некомпьютерщиков, и я видел, какие у них дома стоят компы

Не, одно дело "видел и кажется", совсем другое — реальная инфа

CC>>А то может быть там всё куда новее чем ты думаешь.

M>Или нет
В любом случае это разница между "знать" и "думать что знаешь"
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[8]: Интерфейсы и реализации
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 07.03.24 14:34
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, Marty, Вы писали:


M>>Нет, извини, я просто не слишком точно ответил на твой вопрос

CC>Ты совсем на него не ответил, и похоже не собираешься.
CC>Просто так и ответь "не скажу, секрет", а не ходи вокруг да около

Не скажу, секрет


M>>Фидбэк какой-то есть. Ходил как-то на курсы бухгалтеров, общался с одногрупниками, видел, какие там компы в учебном центре. Опять же, есть некоторое количество знакомых некомпьютерщиков, и я видел, какие у них дома стоят компы

CC>Не, одно дело "видел и кажется", совсем другое — реальная инфа

Ну, скажем так, есть некоторый опыт с общения с некоторой массой различных российских обывателей, хоть и не слишком большой, но, имхо, неплохо показывающий, что и как у российского обывателя с компьютеризацией.


CC>>>А то может быть там всё куда новее чем ты думаешь.

M>>Или нет
CC>В любом случае это разница между "знать" и "думать что знаешь"

Знать без большого исследования или эксперимента невозможно. В том числе то, что я стал разрабатывать с такими минимальными требованиями к системе — это тоже часть эксперимента. Это раз. Второе — WinGDI я знаю лучше всего, и он достаточно низкоуровневый и древний, чтобы в моём АПИ не слишком увлекаться модными фичами. Если потом статистика использования приложения покажет, что поддержка XP/Win7 не нужна, то перепилить на другой бэкэнда — дело месяца, максимум двух, но без такого натурного эксперимента это никак не узнать
Маньяк Робокряк колесит по городу
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.