在 C++/C++11 中,如何获取嵌套类实例化的“所有者”的引用/指针?例如:
class A
{
public:
friend class B;
class B
{
public:
Foo bar(int i) { return get_owner().x[...]; }
private:
A& get_owner()
{ // How to do this? Pseudo code:
return (A*)(this - offsetof(A, b));
}
};
B b;
};
注意:在我的例子中, A不是标准布局类型,因为它有私有和公共成员变量。
背景:我想为复杂属性实现“零成本”语法糖,它访问拥有类中的数据结构并允许 A 的用户编写,例如,
A a;
...
x = a.nodes[5];
y = a.nodes.size();
for (auto n: a.nodes) // using a.nodes.begin() and a.nodes.end()
...
注意 2:我可能可以使用肮脏的技巧来做到这一点,但有没有一种可移植的、符合标准的方法来做到这一点?
如果没有,我将不得不实现 B 以便我可以编写“a.nodes(5)”和“for (auto n: a.nodes())”,但这看起来相当难看。
编辑:我已经考虑过给 B 一个对 A 的引用,但是我不能为 A 使用默认的复制/移动构造函数/赋值运算符。在我的情况下这不会那么糟糕,但我很好奇是否有另一种解决方案。