我不久前问过一个问题关于访问STL适配器的底层容器。我得到了一个非常有帮助的答案:
template <class T, class S, class C>
S& Container(priority_queue<T, S, C>& q) {
struct HackedQueue : private priority_queue<T, S, C> {
static S& Container(priority_queue<T, S, C>& q) {
return q.*&HackedQueue::c;
}
};
return HackedQueue::Container(q);
}
int main()
{
priority_queue<SomeClass> pq;
vector<SomeClass> &tasks = Container(pq);
return 0;
}
不幸的是,我无法理解这一行:
return q.*&HackedQueue::c;
这条线有什么作用?另外,该行如何访问私有容器priority_queue
传递给函数的Container
?
可以这样想:
(q).*(&HackedQueue::c);
首先,你有 HackedQueue::c,它只是一个成员变量的名称。然后使用 &HackedQueue::c,它是指向该成员变量的指针。接下来你采取q
,这只是一个对象引用。然后使用“通过引用将指针绑定到成员”运算符.*
使用以下方法绑定成员变量指针引用的成员变量q
as the this
.
至于私人会员问题,priority_queue::c
仅受保护,而不是私有,因此当您从priority_queue
,您可以访问其受保护的成员。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)