Parallel.For
рефакторинги и т.п.. Думайте об этом так:
(q).*(&HackedQueue::c);
Во-первых, у вас есть HackedQueue :: c, который является просто именем переменной-члена. Затем вы берете & HackedQueue :: c, который является указателем на эту переменную-член. Затем вы берете q
, который является просто ссылкой на объект. Затем вы используете оператор «привязать указатель к члену по ссылке» . *
, чтобы связать переменную-член, на которую ссылается указатель на член-переменную, используя q
как this
].
Что касается проблемы с закрытым членом, priority_queue :: c
только защищено, а не закрыто, поэтому неудивительно, что когда вы производите от priority_queue
, это вы можете получить доступ к его защищенным членам.