Общее решение - сделать друга full
и, поскольку он находится под вашим контролем, просто убедитесь, что он касается только того, к чему он должен прикасаться.
Другое решение, которое я представил некоторое время назад, заключается в том, что вы используете Key
.
class Key { friend class log; Key() {} ~Key() };
class log_context {
public:
void create_log_section(std::string name, Key const&);
};
Только друг Key может создать его экземпляр, и поэтому только они (или те, кому они передают ссылку на ключ) могут получить доступ к «ограниченному» методу.
Я скорее поклонник этого метода для документирования ограниченного доступа.