假设我有一个包含另一个结构类型的对象数组的结构,如下所示:
struct foo { int x, y; };
struct bar { std::array<foo, 4> foos; };
是否可以可移植地编写一个表达式,该表达式将计算给定数组元素的给定属性的指向成员的指针?像&bar::foos[2]::x
?
应用程序是embind:如果可能的话,我想将这样的嵌套C ++类型映射到线性JavaScript元组。如果这不能使用指向成员的指针,那么我可能会尝试使用getter和setter方法,但我仍然想知道是否有办法获得这样的指针成员。
答案 0 :(得分:1)
我认为你不能做那样的事情。 foos[2]
不是bar
的成员,只有foos
。你不能从不是成员的东西中获得指向成员的指针。 C ++ 11标准的第5.3.1 / 4段规定:
只有在使用显式
&
并且其操作数是 qualified-id 未括在括号中时,才会形成指向成员的指针。
这意味着语法本身会阻止您编写任何看起来不像的内容:
&class_name::member_name
其中class_name
本身可以是限定名称。不允许使用下标运算符或其他花哨的表示法。