C# событий с пользовательскими аргументами - как добиться чего-то похожего с C ++? - PullRequest
0 голосов
/ 19 апреля 2020

Можно ли добиться в C ++ поведения, аналогичного событиям с пользовательскими аргументами в C#?

Я наткнулся на следующую ссылку:

https://www.tangiblesoftwaresolutions.com/articles/cplus_equivalent_to_csharp_events.html

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

Ниже приведен пример кода C#, который должен быть имитирован или реализован в C ++. Для контекста это часть приложения (WinForms), использующего шаблон архитектуры MVC.

// part of service layer of Model
// the View is subscribed to this class
public static class ModelService
{
    // methods for using data access layer to interact with database...

    // event for getting all customers
    public static event EventHandler<GetAllCustomersEventArgs> OnGetAllCustomers = delegate { };

    // custom event args
    public class GetAllCustomersEventArgs : EventArgs
    {
        private List<Customer> customerList;

        // ctor
        public GetAllCustomersEventArgs(List<Customer> customerList)
        {
            this.customerList = customerList;
        }

        public List<Customer> getList()
        {
            return this.customerList;
        }
    }
}

// part of View
// subscribed to Model
public partial class ViewCustomersForm : Form
{
    public ViewCustomersForm
    {
        // subscribe to the required Model events
        CustomerOps.OnGetAllCustomers += new EventHandler<GetAllCustomersEventArgs>(customerEventHandler);
    }

    private void customerEventHandler(object sender, GetAllCustomersEventArgs e)
    {
        populateView(e.getList());
    }
}

Идея состоит в том, чтобы реализовать это в будущем в приложении WxWidgets.

I понимать, что в C ++ указатели на функции эквивалентны использованию делегатов в C#. Тем не менее, я не знаком с концепцией указателей на функции и ищу некоторые рекомендации о том, как их использовать в контексте того, что желательно достичь, как описано выше, возможно, с некоторым примером кода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...