Где-то я читал, что friend class это плохо для инкапсуляции. Но мне потребовалось сделать, чтобы class Task;
мог входить в разные интрузивные списки:
class RunningQueue;
class WaitingQueue;
class LocalQueue;
class Task {
//...
private:
friend class Scheduler;
friend class RunningQueue;
friend class WaitingQueue;
friend class LocalQueue;
Task* m_next = nullptr;
//...
};
public Task* m_next;
совсем нехорошо, потому что хочется контролировать, кто это поле меняет.Можно ли тут как-то сделать лучше (чтобы и без friend и инкапсуляция осталась).
P.S. Список интрузивный, потому что lockfree, да и каждый раз при перенесении Task* из одного списка в другой заниматься работой с памятью ни к чему.
P.P.S. Как добавить тег lockfree на LOR?