Ahmed AE Ответов: 1

Как я понимаю это статическое литье ?


У меня есть проблема с пониманием следующей строки кода:

static_cast<void(QButtonGroup::*)(QAbstractButton *, bool)>(&QButtonGroup::m_buttonGroup)


Что я уже пробовал:

Я искал static_cast и понимаю его, я знаю, что в этом коде мы пытаемся преобразовать объект
(&QButtonGroup::m_buttonGroup)

к другому типу:
<void(QButtonGroup::*)(QAbstractButton *, bool)>

Но я не понимаю предыдущей строки.что мы подразумеваем под этим:
void(QButtonGroup::*)(QAbstractButton *, bool)

это должен быть тип, но я не могу его получить?
Заранее спасибо.

1 Ответов

Рейтинг:
9

Richard MacCutchan

static_cast<void(QButtonGroup::*)(QAbstractButton *, bool)>(&QButtonGroup::m_buttonGroup)

Начиная с неправильного конца посмотрите на то что находится в скобках:
&QButtonGroup::m_buttonGroup

m_buttonGroup является статическим объектом, в QButtonGroup класс. И & значит используйте адрес этого объекта. Таким образом, это исходный элемент, который должен быть отлит, к тому, что находится в угловых скобках (< >). Угловые скобки содержат:
void(QButtonGroup::*)(QAbstractButton *, bool)
Который является определением указателя функции. То (QButtonGroup::*) часть говорит, что это указатель на что-то в QButtonGroup класс. Круглые скобки вокруг этого говорят нам, что это функция, а не указатель данных. Следующие круглые скобки содержат определение параметров, которые должны быть переданы функции, и предыдущие скобки содержат определение параметров, которые должны быть переданы функции. void часть говорит нам, что функция не имеет возвращаемого типа.

Без дополнительного контекста невозможно сказать больше.