Matthieu M. разработал шаблон для защиты доступа в этом ответе, который я видел раньше, но никогда не уловимо считал шаблон:
class SomeKey {
friend class Foo;
SomeKey() {}
// possibly make it non-copyable too
};
class Bar {
public:
void protectedMethod(SomeKey);
};
Здесь только friend
класса ключей имеет доступ к protectedMethod()
:
class Foo {
void do_stuff(Bar& b) {
b.protectedMethod(SomeKey()); // fine, Foo is friend of SomeKey
}
};
class Baz {
void do_stuff(Bar& b) {
b.protectedMethod(SomeKey()); // error, SomeKey::SomeKey() is private
}
};
Это позволяет осуществлять более мелкомасштабный контроль доступа, чем делать Foo
a friend
Bar
и избегать более сложных шаблонов проксирования.
Кто-нибудь знает, имеет ли этот подход уже имя, т.е. известный шаблон?