Matthieu M.在我以前见过的this answer中提出了一种用于访问保护的模式,但从未自觉地考虑过一种模式:
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
变成friend
的Bar
相比,它提供更细粒度的访问控制,并且避免了更复杂的代理模式。有谁知道这种方法是否已经有名称,即已知模式吗?
最佳答案
多亏了your other question,该模式现在被称为“密码”模式。
在C++ 11中,它变得更加干净,因为它不是调用
b.protectedMethod(SomeKey());
您可以致电:
b.protectedMethod({});