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变成friendBar相比,它提供更细粒度的访问控制,并且避免了更复杂的代理模式。

有谁知道这种方法是否已经有名称,即已知模式吗?

最佳答案

多亏了your other question,该模式现在被称为“密码”模式。

在C++ 11中,它变得更加干净,因为它不是调用

b.protectedMethod(SomeKey());

您可以致电:
b.protectedMethod({});

08-16 08:44