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

Сообщение Re[6]: Как такое написать по Сиплюсплюсному? от 24.03.2025 11:16

Изменено 24.03.2025 11:17 kov_serg

Re[6]: Как такое написать по Сиплюсплюсному?
Здравствуйте, B0FEE664, Вы писали:

BFE>Ну так и зачем эти извращения?

BFE>Если вам нужен указатель на группу функций, ну так и заведите группу функций и возьмите от неё указатель.
BFE>
BFE>struct Listner
BFE>{
BFE>  std::function<void(void *args)> begin;
BFE>  std::function<int(double p)> progress;
BFE>  std::function<void(void *args)> end;
BFE>};


BFE>struct GUIWindow {
BFE>...
BFE>  // это объявление писать в конце класса 
BFE>  Listner action1 = 
BFE>  {
BFE>     .begin    = std::function<void(void *args)>( [pThis = this](void *args){        pThis->action1_begin((Action1Args*)args);}),
BFE>     .progress = std::function<int(double p)   >( [pThis = this](double p)  { return pThis->action1_progress(p);}),
BFE>     .end      = std::function<void(void *args)>( [pThis = this](void *args){        pThis->action1_end((Action2Result*)res);}),
BFE>  };
BFE>};
BFE>


BFE>А вообще, здесь где-то нужен полиморфизм вида signal-slot (или шаблонные виртуальные функции, которые в C++ все еще не могут добавить из-за косности мышления)

Хз. В C было просто достаточно двух указателей и кучи констант и никаких тебе UB

Вариант с лямбдами в std::function ещё более ужасен (на мой взгляд) чем другие альтернативы
Мой вариант работает достаточно хорошо и локанично, не смотря на то что это не достаточно сиплюсплюснуто.
А как написать parent_of следуя букве е6@нyтblх современных стандартов, я хз.
Re[6]: Как такое написать по Сиплюсплюсному?
Здравствуйте, B0FEE664, Вы писали:

BFE>Ну так и зачем эти извращения?

BFE>Если вам нужен указатель на группу функций, ну так и заведите группу функций и возьмите от неё указатель.
BFE>
BFE>struct Listner
BFE>{
BFE>  std::function<void(void *args)> begin;
BFE>  std::function<int(double p)> progress;
BFE>  std::function<void(void *args)> end;
BFE>};


BFE>struct GUIWindow {
BFE>...
BFE>  // это объявление писать в конце класса 
BFE>  Listner action1 = 
BFE>  {
BFE>     .begin    = std::function<void(void *args)>( [pThis = this](void *args){        pThis->action1_begin((Action1Args*)args);}),
BFE>     .progress = std::function<int(double p)   >( [pThis = this](double p)  { return pThis->action1_progress(p);}),
BFE>     .end      = std::function<void(void *args)>( [pThis = this](void *args){        pThis->action1_end((Action2Result*)res);}),
BFE>  };
BFE>};
BFE>


BFE>А вообще, здесь где-то нужен полиморфизм вида signal-slot (или шаблонные виртуальные функции, которые в C++ все еще не могут добавить из-за косности мышления)

В C было просто достаточно двух указателей и кучи констант и никаких тебе UB

Вариант с лямбдами в std::function ещё более ужасен (на мой взгляд) чем другие альтернативы
Мой вариант работает достаточно хорошо и локанично, не смотря на то что это не достаточно сиплюсплюснуто.
А как написать parent_of следуя букве е6@нyтblх современных стандартов, я хз.