Указатель на метод класса и скобки

150
02 июня 2019, 16:00

Чем обусловлена невозможность писать указатель на метод в скобках? Почему запись указателя на метод должна быть именно

 ClassName::*MethodName

Почему нельзя так?

 ClassName::(*MethodName)

Если это какая-то особенность синтаксиса, прошу дать развёрнутый ответ, т.к. тема очень уж интересная

Answer 1

Не очень понимаю, на какой ответ вы расчитываете. Почему? Потому что в стандарте так написано. Должно быть, это сделано, чтобы не усложнять грамматику понапрасну.

Открываем грамматику для member pointers:

[dcl.mptr]/1

...

nested-name-specifier * attribute-specifier-seqopt cv-qualifier-seqopt D1

and the nested-name-specifier denotes a class ...

Выражаясь простым языком,

  • nested-name-specifier - это класс:: (именно в этом случае; в общем случае у него более широкое значение),

  • * - это *.

  • attribute-specifier-seqopt - это опциональный набор атрибутов вида [[...]],

  • cv-qualifier-seqopt - это опциональные const и/или volatile.

  • D1 - оставшаяся часть объявления, в вашем случае просто имя переменной.

Тут нигде не написано, что после nested-name-specifier может быть (.

READ ALSO
Как заменить символы только в первой половине строки?

Как заменить символы только в первой половине строки?

Решаю задачку, не понимаю как сделать замену только в первой половине строки

166