Предположим, у меня есть структура, содержащая массив объектов другого типа структуры, например:
struct foo { int x, y; };
struct bar { std::array<foo, 4> foos; };
Можно ли переносить запись выражения, которое будет вычислять указатель на член для данного атрибута данного элемента массива? Что-то вроде &bar::foos[2]::x
?
Приложение embindЯ бы хотел отобразить вложенный тип C ++, как этот, в линейный кортеж JavaScript, если это возможно. Если это не сработает с использованием указателя на член, то я мог бы попробовать вместо этого использовать методы getter и setter, но я все же хотел бы знать, есть ли способ получить такой указатель на член.
Я не думаю, что вы можете сделать что-нибудь подобное. foos[2]
не является членом bar
, только foos
является. Вы не можете получить указатель на член от чего-то, что не является членом. Параграф 5.3.1 / 4 стандарта C ++ 11 определяет:
Указатель на член формируется только при явном
&
используется и его операнд Квалифицированный-идентификатор не заключено в скобки.
Это означает, что сама грамматика не позволяет вам писать что-то, что не похоже на:
&class_name::member_name
где class_name
само по себе может быть квалифицированным именем. Никакие операторы индекса или другие необычные обозначения не допускаются.
Других решений пока нет …