Я недавно задал вопрос о доступе к базовому контейнеру адаптеров 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
?