指向std::array成员的指针

Pointer to member for std::array

本文关键字:指针 成员 array std 指向      更新时间:2023-10-16

假设我有一个结构体包含另一种结构体类型的对象数组,如下所示:

struct foo { int x, y; };
struct bar { std::array<foo, 4> foos; };

是否可以移植地编写一个表达式,该表达式将计算为给定数组元素的给定属性的指向成员的指针?比如&bar::foos[2]::x ?

应用程序是嵌套的:如果可能的话,我想将像这样的嵌套c++类型映射到线性JavaScript元组。如果使用指针到成员不能实现这一点,那么我可能可以尝试使用getter和setter方法,但我仍然想知道是否有一种方法可以获得这样的指针到成员。

我认为你做不到。foos[2]不是bar的成员,只有foos是。你不能从非成员中获得指向成员的指针。c++ 11标准第5.3.1/4段规定:

成员指针仅在使用显式&且其操作数为限定id且未括在括号内时才形成。

这意味着语法本身阻止您编写任何看起来不像的内容:

&class_name::member_name

,其中class_name本身可以是限定名。不允许使用下标操作符或其他花哨的符号。