Странная проблема с кастингом - PullRequest
0 голосов
/ 29 мая 2020

Проблема нечетного приведения

Чтобы сэкономить время, я перейду сразу к вопросу.

В одной из моих функций возврата я установил ссылку, сделав оператор using, например, так:

Пример: using T = int( __thiscall* )( void* );

Теперь в этом операторе у меня есть return, который взамен соберет смещение от возврата указателя ссылочного типа:

Пример: return ( *reinterpret_cast< T** >( this ) )[0X0]( this );

Когда я использую ссылку, использующую мой оператор using, операция завершается успешно, и моя функция будет работать правильно. Однако, когда я не использую этот оператор и оценивая эталонный родной код, мой компилятор вернет мне несколько токенов, заявив, что он не может быть обработан.

Пример того, что я пытаюсь сделать: return ( *reinterpret_cast< int( __thiscall* )( void* )** >( this ) )[0X0]( this );

Что-то мне не хватает, или это просто невозможно?

1 Ответ

2 голосов
/ 29 мая 2020

В качестве чисто синтаксического вопроса и не вдаваясь в подробности почему вы делаете это, синтаксис для указателя на указатель на указатель на функцию заключается в увеличении числа * квалификаторы, где вы обычно помещаете только один:

return ( *reinterpret_cast< int( __thiscall*** )( void* ) >( this ) )[0X0]( this );
                                           ^^^

Вместо того, чтобы просто прикреплять их к концу - это работает для псевдонима типа, но не для многоуровневого типа указатель на функцию.

...