Esse padrão de proteção de acesso orientado a chave é um idioma conhecido?
Matthieu M. trouxe um padrão de proteção de acesso emesta resposta que eu já tinha visto antes, mas nunca considerei um padrão:
class SomeKey {
friend class Foo;
SomeKey() {}
// possibly make it non-copyable too
};
class Bar {
public:
void protectedMethod(SomeKey);
};
Aqui apenas umfriend
da classe chave tem acesso aprotectedMethod()
:
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
}
};
Permite um controle de acesso mais granular do que fazerFoo
a friend
doBar
e evita padrões de proxy mais complicados.
Alguém sabe se essa abordagem já tem um nome, ou seja, é um padrão conhecido?