Передайте QMetaMethod в качестве параметра функции, которая использует новый синтаксис QObject :: connect - PullRequest
0 голосов
/ 02 мая 2019

Я хочу создать оболочку вокруг соединения QObject, используя новый синтаксис с проверкой типа во время компиляции.Основная идея была бы такова: «Эй, слушатель, подключи слоты этого объекта к моему сигналу newData»

void Listener::_addClient(const QObject *object, const QMetaMethod& slot)
{
    connect(this, &Listener::newData, object, slot);
}

А некоторые классы Client просто сделают:

Listener myListener;
myListener._addClient(this, &Client::mySlot);

Это, конечно,не компилируется.

  • Поскольку все объекты Listener будут принадлежать классу менеджера, я не могу получить к ним прямой доступ, поэтому традиционное соединение невозможно.

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

1 Ответ

0 голосов
/ 02 мая 2019

Вы можете использовать шаблон:

template <typename Receiver, typename Slot>
void Listener::_addClient(const Receiver *object, const Slot& slot)
{
    connect(this, &Listener::newData, object, slot);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...